在JPanel上放置绘图

时间:2009-10-11 16:13:24

标签: java jframe jpanel

我的课程有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

1 个答案:

答案 0 :(得分:0)

repaint方法(以及随后的paintComponent方法)不仅由JFrame调用,而且还由Swing本身调用,当需要重新绘制JPanel

的内容

Painting in AWT and Swing文章是开始获取有关绘画如何运作的信息的好地方。

在这种情况下,repaint方法由文章调用的事件调用系统触发的绘画

  

在系统触发的绘画中   操作,系统请求一个   组件来呈现其内容,   通常用于以下之一   原因:

     
      
  • 首先在屏幕上显示该组件。
  •   
  • 调整组件大小。
  •   
  • 该组件有损坏需要修理。 (例如,   以前掩盖了一些东西   组件已移动,并且之前已移动   模块的模糊部分有   暴露)。
  •   
相关问题