Mam JFrame
z 2 JPanel
w nim: a PaintPanel
(z metodą paint()
) i ButtonPanel
(z przyciskami). Kiedy wywołuję repaint()
z PaintPanel
(ale kliknięcie przycisku) przycisk ButtonPanel
jest malowany w PaintPanel
! To nie jest klikalne ani nic, tylko tam jest.JButton skopiowany podczas odświeżania?
Starałem się odtworzyć problem z tym kodem:
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();
}
}
sould Ten odtworzyć problem mam (przepraszam za dziwnych oznaczeń kodowych, nie wydaje się uzyskać to prawo).
Mam nadzieję, że ktoś z was wie, co się tu dzieje, bo nie ...
Takie artefakty wykończeniowych często wynikają z braku na cześć [krycie] (http://java.sun.com/products/jfc/tsc/articles/painting/index.html#props) Właściwość. Co więcej, "Programy Swing powinny przesłonić' paintComponent() 'zamiast przesłonić' paint() '." - [* Malowanie w AWT i Swing: The Paint Methods *] (http://java.sun.com/products/jfc /tsc/articles/painting/index.html#callbacks). – trashgod