#java #button #desktop #shapes
#java #кнопка #Для рабочего стола #фигуры
Вопрос:
Добрый день.
Я разрабатываю программу, которая должна показывать несколько фигур, когда пользователь нажимает кнопку. По крайней мере, это не отображается. Что не так? Код является:
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:
При добавлении / удалении компонентов в видимом графическом интерфейсе код должен быть:
panel.add(...);
panel.revalidate();
panel.repaint();
Ваш дизайн добавления новой панели каждый раз, когда вы нажимаете кнопку, не очень хорош.
Вместо этого вы должны создать пользовательскую панель рисования и переопределить метод paintComponent(). Затем, когда вы нажимаете кнопку, вы вызываете метод в своем пользовательском компоненте, чтобы задать фигуру, которую вы хотите нарисовать. Метод paintComponent () должен быть достаточно умным, чтобы нарисовать фигуру. Затем вы вызываете repaint () на панели.
Прочитайте раздел из руководства Swing по пользовательскому рисованию для получения дополнительной информации и рабочих примеров.