我已閱讀,當JPanel
對象(或延伸JPanel
一個類的任何實例)是JFrame
的一部分,每個所述JVM認爲,JFrame
需要被刷新時,JPanel
實例的paintComponent()
方法被調用。當單個JFrame中有多個JPanel對象時,repaint()如何工作?
但是當我有兩個這樣的對象,即兩個不同的類的實例會發生什麼?運行我在最後提供的代碼,我發現在調用最小化時調用了兩個paintComponent()
方法,或者按colourButton
。
但是,這是而不是的情況下,當我按labelButton
。它只調用MyDrawPanel paintComponent()
。爲什麼會這樣?
預先感謝您!
class GUI {
JFrame frame;
JLabel label;
void go() {
JButton labelButton = new JButton("Click me to change that (<-) text");
labelButton.addActionListener(new LabelListener());
JButton colourButton = new JButton("Click me to change the colour");
colourButton.addActionListener(new ColourListener());
label = new JLabel("Don't change me!");
frame = new JFrame();
frame.setSize(600, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
MyDrawPanel Q = new MyDrawPanel();
DrawPanel P = new DrawPanel();
frame.getContentPane().add(BorderLayout.CENTER, Q);
frame.getContentPane().add(BorderLayout.EAST, labelButton);
frame.getContentPane().add(BorderLayout.WEST, label);
frame.getContentPane().add(BorderLayout.SOUTH, colourButton);
frame.getContentPane().add(BorderLayout.NORTH, P);
}
class LabelListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent event){
label.setText("You've changed me!");
}
}
class ColourListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent event){
MyDrawPanel.red = (int) (Math.random() * 255);
MyDrawPanel.green = (int) (Math.random() * 255);
MyDrawPanel.blue = (int) (Math.random() * 255);
frame.repaint();
}
}
}
class MyDrawPanel extends JPanel {
static int red = (int) (Math.random() * 255);
static int green = (int) (Math.random() * 255);
static int blue = (int) (Math.random() * 255);
@Override
public void paintComponent(Graphics g){
Color randomColour = new Color(red, green, blue);
g.setColor(randomColour);
g.fillOval(70, 70, 75, 75);
System.out.println("Q");
}
}
class DrawPanel extends JPanel {
@Override
public void paintComponent(Graphics g){
System.out.println("P");
}
}
它調用你的'paintComponent' – Zizouz212