Джава. Проблема с рисованием фигур нажатием кнопки - PullRequest
0 голосов
/ 13 мая 2011

Добрый день.

Я разрабатываю программу, которая должна показывать несколько фигур, когда пользователь нажимает кнопку.По крайней мере, это не показывает это.Что случилось?Код:

public class ShowFrame extends JFrame
{
    public ShowFrame()
    {
        this.setTitle("Show data");                                             //Title
        this.setSize( DEF_WIDTH, DEF_HEIGHT );                                  //Size of frame
        this.setResizable(false); 

    //...                                     

    JButton testButton = new JButton("Test");
    buttonPanel.add(testButton);
    this.add(buttonPanel, BorderLayout.SOUTH);


    testButton.addActionListener( new ActionListener() {                    //Add listener
        public void actionPerformed(ActionEvent e) {              
            DrawStuff stuff = new DrawStuff();                              //Create class which draws shapes
            add(stuff, BorderLayout.CENTER);
            System.out.println("Test Button");
        }
    } );
   }

public static final int DEF_WIDTH  = 600;                                   
public static final int DEF_HEIGHT = 400;                                   

private JPanel buttonPanel = new JPanel();
}

Класс, который рисует фигуры:

public class DrawStuff extends JComponent
{
    public void paintComponent( Graphics g )
    {
        Graphics2D g2 = (Graphics2D) g;
        //...
        Rectangle2D rect = new Rectangle2D.Double(leftX, topY, width, height);
        Line2D line      = new Line2D.Double(leftX, topY, 0, 0);
        //...
        g2.draw(rect);
        g2.draw(line);
        //...
    }

}

1 Ответ

1 голос
/ 13 мая 2011

Когда вы добавляете / удаляете компоненты в видимом графическом интерфейсе, код должен быть:

panel.add(...);
panel.revalidate();
panel.repaint();

Ваш дизайн добавления новой панели при каждом нажатии кнопки не очень хорош.

Вместо этого вы должны создать собственную панель рисования и переопределить метод paintComponent (). Затем, когда вы нажимаете кнопку, вы вызываете метод в своем пользовательском компоненте, чтобы установить форму, которую вы хотите нарисовать. Метод paintComponent () должен быть достаточно умным, чтобы рисовать фигуру. Затем вы вызываете repaint () на панели.

Прочтите раздел из учебника по Swing на Custom Painting для получения дополнительной информации и рабочих примеров.

...