JPanel не отображает чертеж - PullRequest
       36

JPanel не отображает чертеж

2 голосов
/ 09 октября 2009

У меня проблема с отображением чертежа на JPanel. Я создал три класса, которые связаны друг с другом следующим образом. Мне было интересно, почему этот код не отображает мой рисунок.

c.add(pDraw);
pDraw.add(draw);

1) MAIN

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

2) JFRAME

 public class Frame extends JFrame implements ActionListener{

    private drawingBoard draw;  

    public Frame (){
         draw = new drawingBoard(); //generate pattern
         GridBagLayout m = new GridBagLayout();
         Container c = (Container)getContentPane();
         c.setLayout (m);
         GridBagConstraints con;
         .......

         JPanel pDraw = new JPanel();       
         pDraw.setPreferredSize(new Dimension(500,500));
             .....  
         c.add(pDraw);
         pDraw.add(draw); // Call other class for drawing

         .....
         setResizable(false); 
         pack();
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
         setVisible(true);
    }
}

3) JPANEL

public class drawingBoard extends JPanel {
      .....
      public void paint(Graphics g) {
      ......
      }
   }

Ответы [ 4 ]

3 голосов
/ 09 октября 2009

Вот ответ, я забыл установить размер чертежной доски JPanel: -)

 public class drawingBoard extends JPanel {
        public drawingBoard(){
        setPreferredSize(new Dimension (500,500));

        }
    }
1 голос
/ 09 октября 2009

Это одна строка изменения вашего кода.

Все, что вам нужно сделать, это прочитать учебник Swing в «Custom Painting» , чтобы понять, что вы делаете неправильно.

Это третий вопрос подряд, который можно было бы решить за считанные минуты, если бы вы потрудились прочитать учебник.

И вы до сих пор не научились публиковать SSCCE , поэтому я не собираюсь давать вам ответ ложкой.

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

Я согласен со всеми замечаниями, которые Бен Торелл сделал в своем посте, а также с некоторыми дополнительными советами по устранению неполадок здесь.

Попробуйте это -

public class DrawingBoardTest extends JFrame {
    public DrawingBoardTest() {
        getContentPane().add(new drawingBoard(), BorderLayout.CENTER);
    }
    public static void main(String[] args ) {
        JFrame f = new DrawingBoardTest();
        f.setSize(500, 500);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

Если отображается DrawingPanel, то это проблема с вашим GridBagLayout, или с предпочтительным размером, установленным на DrawingPanel, который недостаточно велик для отображения чертежа, или добавлением DrawingBoard в pDraw (который, насколько я вижу из кода, действительно не нужно ...).

Макет по умолчанию для панели содержимого JFrame - BorderLayout, который даст все пространство центральному компоненту, где я размещаю drawBoard в опубликованном коде.

Макетом JPanel по умолчанию является FlowLayout, который дает компоненту только его предпочтительный размер. Я вижу, что вы установили предпочтительный размер для pDraw, но не для drawBoard, в исходном коде - у drawBoard может быть установлен предпочтительный размер, который слишком мал для отображения чертежа.

Если DrawingPanel не отображается - это проблема в вашем методе DrawingPanel paint ().

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

Хотя отладку кода немного сложнее, не видя GridBagConstraints или метод paint (), я предлагаю вам, как правило, лучше переопределить метод paintComponent (), чем метод paint (). В DrawingBoard попробуйте это вместо переопределения paint ():

public void paintComponent(Graphics g) {
    super.paintComponent(g); //optional
    ...
}

Это может иметь значение. Для получения дополнительной информации ознакомьтесь с этой статьей из Java .

Кроме того, как халява, вам, вероятно, не нужно выполнять setVisible () и setDefaultCloseOperation () как в методе main (), так и в конструкторе Frame.

...