Tengo un JFrame
con 2 JPanel
en él: un PaintPanel
(con un método paint()
) y un ButtonPanel
(con botones). Cuando invoco el repaint()
del PaintPanel
(pero haciendo clic en el botón), el botón del ButtonPanel
se está pintando en el PaintPanel
. No se puede hacer clic ni nada, solo está allí.J ¿Se ha copiado el botón para volver a pintar?
Me trataron de recrear el problema con este código:
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("frame");
frame.setSize(400,400);
frame.setLayout(new GridLayout(2,1));
PaintPanel paint = new PaintPanel();
ButtonPanel buttons = new ButtonPanel(paint);
frame.add(paint);
frame.add(buttons);
frame.setVisible(true);
}
}
public class PaintPanel extends JPanel{
public void paint(Graphics g){
g.drawRect(10, 10, 10, 10);
}
}
public class ButtonPanel extends JPanel implements ActionListener{
private PaintPanel paintPanel;
public ButtonPanel(PaintPanel paintPanel){
this.paintPanel=paintPanel;
JButton button = new JButton("button");
button.addActionListener(this);
add(button);
}
@Override
public void actionPerformed(ActionEvent arg0) {
paintPanel.repaint();
}
}
Este sould recrear el problema que tengo (lo siento por las marcas de código impares, parece que no puede hacerlo bien).
realmente espero uno de ustedes sabe lo que está sucediendo aquí porque yo no ...
Tales artefactos de representación a menudo surgen de no cumplir con la [opacidad] (http://java.sun.com/products/jfc/tsc/articles/painting/index.html#props) propiedad. Además, "los programas Swing deben anular' paintComponent() 'en lugar de anular' paint() '." - [* Pintar en AWT y Swing: The Paint Methods *] (http://java.sun.com/products/jfc /tsc/articles/painting/index.html#callbacks). – trashgod