【发布时间】:2014-08-14 07:40:15
【问题描述】:
我对 GUI 有点陌生。我创建了这个简单的应用程序,每次按下按钮时都会用不同的颜色绘制一个椭圆形。但是,当我调用JPanel 的repaint() 时,它不仅仅是重新绘制面板的框架部分(椭圆形)。相反,它会重新绘制整个框架,并且还会绘制我在框架顶部(北部边界)单击的按钮。我知道我可以简单地调用JFrame 的repaint() 来解决这个问题,但我只是想知道为什么会这样。我认为repaint() 所做的只是简单地调用对象的paintComponent()。
有人可以解释为什么它会这样吗?
谢谢!!
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Jbutton extends JFrame implements ActionListener {
JFrame frame;
JButton b;
panel p;
public void go() {
frame = new JFrame();
b = new JButton("click me");
p = new panel();
b.addActionListener(this);
frame.add(BorderLayout.CENTER, p);
frame.add(BorderLayout.SOUTH, b);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setSize(250, 250);
frame.setVisible(true);
}
class panel extends JPanel {
public void paintComponent(Graphics g) {
int red = (int) (Math.random() * 255);
int green = (int) (Math.random() * 255);
int blue = (int) (Math.random() * 255);
g.setColor(new Color(red, blue, green));
g.fillOval(20, 30, 50, 50);
}
}
@Override
public void actionPerformed(ActionEvent arg0) {
p.repaint();
}
}
【问题讨论】:
标签: java swing user-interface jpanel components