【问题标题】:Placing drawing on JPanel在 JPanel 上放置绘图
【发布时间】:2009-10-11 16:13:24
【问题描述】:

我的程序有 3 个课程。 1)主要,2)框架,3)绘图板。我的程序的逻辑是,每次用户点击 New pattern 按钮时都会显示一个新的绘图(这工作正常)。

第一类 - 主要方法

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();        
 }

}

第三类 - 运行绘图功能,例如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

【问题讨论】:

    标签: java jframe jpanel


    【解决方案1】:

    repaint 方法(以及随后的paintComponent 方法)不仅由JFrame 调用,而且在需要重绘JPanel 的内容时也由Swing 本身调用.

    Painting in AWT and Swing 文章是了解绘画工作原理的好地方。

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

    在系统触发的绘画中 操作时,系统请求一个 渲染其内容的组件, 通常用于以下其中一项 原因:

    • 组件首先在屏幕上可见。
    • 组件已调整大小。
    • 组件有需要修复的损坏。 (例如, 以前掩盖的东西 组件已移动,并且之前的 组件的模糊部分有 暴露)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      相关资源
      最近更新 更多