我的课程有3节课。 1)主,2)框架,3)drawingBoard。我的程序的逻辑是,每次用户点击新模式按钮时都会显示一个新图形(这个工作正常)。
第一课 - 主要方法
public class mainPage {
public static void main(String[]args){
JFrame appFrame = new Frame();
appFrame.setVisible(true);
appFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);*/
}
}
第二课 - 描述布局(我使用网格包布局)
public class Frame extends JFrame implements ActionListener {
public Frame (){
GridBagLayout m = new GridBagLayout();
Container c = (Container)getContentPane();
c.setLayout (m);
GridBagConstraints con;
JButton bPattern = new JButton("New Pattern");
....
bPattern.addActionListener(this);
JPanel pDraw = new JPanel();
.....
pDraw.add(new drawingBoard()); //drawing will be placed in this panel
}
public void actionPerformed(ActionEvent e) {
repaint();
}
}
第3课 - 运行绘图功能,例如paintComponent()等
public class drawingBoard extends JPanel {
public drawingBoard(){}
public void paintComponent(Graphic g){}
....
}
问题是,当我在控制台上看时,似乎即使用户没有点击按钮,程序也会调用类'drawingBoard'并重新绘制。 paint组件在第3类(drawingBoard)中。虽然这似乎没有给我一个问题(例如,除非用户点击按钮,否则面板上没有显示图画),我只是好奇这是怎么发生的。是因为我在FRAME class()中编写了这段代码。我打算编写这段代码是为了确保绘图应该放在这个特定的面板中(我有3个面板),但是除非单击按钮,否则不要调用第3个类。
JPanel pDraw = new JPanel();
pDraw.add(new drawingBoard()); //place drawing here
答案 0 :(得分:0)
repaint
方法(以及随后的paintComponent
方法)不仅由JFrame
调用,而且还由Swing本身调用,当需要重新绘制JPanel
。
Painting in AWT and Swing文章是开始获取有关绘画如何运作的信息的好地方。
在这种情况下,repaint
方法由文章调用的事件调用系统触发的绘画:
在系统触发的绘画中 操作,系统请求一个 组件来呈现其内容, 通常用于以下之一 原因:
- 首先在屏幕上显示该组件。
- 调整组件大小。
- 该组件有损坏需要修理。 (例如, 以前掩盖了一些东西 组件已移动,并且之前已移动 模块的模糊部分有 暴露)。