Размещение рисунка на JPanel - PullRequest
       24

Размещение рисунка на JPanel

0 голосов
/ 11 октября 2009

В моей программе 3 занятия. 1) основной, 2) каркасный, 3) чертежный щит. Логика моей программы заключается в том, что каждый раз, когда пользователь нажимает кнопку Новый шаблон (и это нормально работает), будет отображаться новый чертеж.

1-й класс - основной метод

public class mainPage {
   public static void main(String[]args){
     JFrame appFrame = new Frame();
     appFrame.setVisible(true); 
     appFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);*/
   }
}

2-й класс - опишите макет (я использую Grid Bag Layout)

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' и перерисовывает. Компонент рисования находится в 3-м классе (DrawingBoard). Хотя это, похоже, не доставляет мне проблем (например, на панели не отображается рисунок, пока пользователь не нажмет кнопку), мне просто любопытно, как это произошло. это потому, что я написал этот код в классе FRAME (). Я намерен написать этот код, чтобы убедиться, что чертеж был помещен на эту конкретную панель (у меня есть 3 панели), а не вызывать 3-й класс, если кнопка не была нажата.

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

1 Ответ

0 голосов
/ 11 октября 2009

Метод repaint (и впоследствии метод paintComponent) вызывается не только JFrame, но и самим Swing. а также, когда необходимо перекрасить содержимое JPanel.

Статья Живопись в AWT и Swing - хорошее место для начала, чтобы получить информацию о том, как работает живопись.

В этом случае метод repaint вызывается событиями, которые в статье называются Системное рисование :

В живописи, вызванной системой операция, система запрашивает компонент для отображения его содержимого, обычно для одного из следующих Причины:

  • Компонент сначала отображается на экране.
  • Размер компонента изменен.
  • Компонент имеет повреждения, которые необходимо отремонтировать. (Например, то, что ранее скрывало компонент был перемещен, а ранее скрытая часть компонента имеет разоблачаться).
...