首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPanel上的放样图

JPanel上的放样图
EN

Stack Overflow用户
提问于 2009-10-11 16:13:24
回答 1查看 627关注 0票数 0

我的程序有3节课。( 1)主,2)帧,3) drawingBoard。我的程序的逻辑是,每次用户单击new按钮时,都会显示一个新的绘图(并且这个操作很好)。

一级-主要方法

代码语言:javascript
复制
public class mainPage {
   public static void main(String[]args){
     JFrame appFrame = new Frame();
     appFrame.setVisible(true); 
     appFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);*/
   }
}

第二类-描述布局(我使用网格袋布局)

代码语言:javascript
复制
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 ()等。

代码语言:javascript
复制
public class drawingBoard extends JPanel {
  public drawingBoard(){}
  public void paintComponent(Graphic g){}
  ....
  }

问题是,当我查看控制台时,即使用户没有点击按钮,程序也会调用类'drawingBoard‘并重新绘制。油漆组件位于第三类(drawingBoard)。虽然这似乎没有给我一个问题(例如,没有显示在面板上,除非用户点击按钮),我只是好奇这是如何发生的。这是因为我在框架类()中编写了这段代码。我编写这段代码的目的是确保绘图应该放在这个特定的面板中(我有3个面板),但是除非单击了按钮,否则不会调用第三类。

代码语言:javascript
复制
JPanel pDraw = new JPanel();        
pDraw.add(new drawingBoard()); //place drawing here
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-11 16:21:59

repaint方法(以及随后,paintComponent不仅被JFrame调用,而且还通过Swing本身调用,当需要重新绘制JPanel的内容时也是如此。

AWT和Swing中的绘画文章是一个很好的地方,可以开始了解绘画是如何工作的。

在本例中,repaint方法是由本文称为系统触发绘制的事件调用的。

在系统触发的绘制操作中,系统请求组件呈现其内容,通常原因如下:

  • 该组件首先在屏幕上显示。
  • 组件被调整大小。
  • 该组件有损坏,需要修复。(例如,以前蒙蔽组件的东西已经移动,而组件先前模糊的部分已经暴露)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1551052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档