0

我的程序有 3 节课。1)主要,2)框架,3)绘图板。我的程序的逻辑是,每次用户单击新模式按钮时都会显示一个新图形(并且工作正常)。

第一类 - 主要方法

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”并重新绘制。油漆组件属于第三类(绘图板)。尽管这似乎没有给我带来问题(例如,除非用户单击按钮,否则面板上不会显示任何绘图),但我只是好奇这是怎么发生的。那是因为我在FRAME类()中编写了这段代码。我编写此代码的目的是确保绘图应放置在此特定面板中(我有 3 个面板),但除非单击按钮,否则不要调用第 3 类。

JPanel pDraw = new JPanel();        
pDraw.add(new drawingBoard()); //place drawing here
4

1 回答 1

0

当需要重绘. repaint_paintComponentJFrameJPanel

AWT 和 Swing中的绘画文章是开始获取有关绘画如何工作的信息的好地方。

在这种情况下,该repaint方法被文章称为System-triggered Painting的事件调用:

在系统触发的绘制操作中,系统请求组件渲染其内容,通常出于以下原因之一:

  • 该组件首先在屏幕上可见。
  • 组件已调整大小。
  • 组件有损坏需要修理。(例如,之前遮挡组件的东西已经移动,组件之前遮挡的部分已经暴露)。
于 2009-10-11T16:21:59.103 回答