#java #swing #user-interface
#java #swing #пользовательский интерфейс
Вопрос:
Я пытаюсь создать массив кнопок в качестве имитации диаграммы размещения, но кнопки не отображаются на экране, отображается только рамка. что я делаю не так?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class guiCreator extends JFrame
{
public guiCreator()
{
setTitle("Seats");
setSize(500, 600);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
} );
Container contentPane = getContentPane();
contentPane.add(new seatingPanel());
setVisible(true);
}
}
class seatingPanel extends JPanel implements ActionListener
{
public seatingPanel()
{
setLayout(new BorderLayout());
JPanel panel4seating = new JPanel();//creating a grid panel
panel4seating.setLayout(new GridLayout(4, 10));//setting the layout of the grid panel
JButton [] seats = new JButton [40]; //creating a pointer to the buttonsArray
for (int i = 0; i < 40; i )
{
seats[i] = new JButton();//creating the buttons
seats[i].addActionListener(this);
panel4seating.add(seats[i]);
}
}
@Override
public void actionPerformed(ActionEvent evt)
{
}
//main
guiCreator flightSeats = new guiCreator();
Ответ №1:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GuiCreator extends JFrame
{
public GuiCreator()
{
super("Seats");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.add(new SeatingPanel());
pack();
setVisible(true);
}
public static void main(String[] args) {
new GuiCreator();
}
}
class SeatingPanel extends JPanel
{
public SeatingPanel()
{
super(new BorderLayout());
JPanel panel4seating = new JPanel();//creating a grid panel
panel4seating.setLayout(new GridLayout(4, 10));//setting the layout of the grid panel
JButton [] seats = new JButton [40]; //creating a pointer to the buttonsArray
for (int i = 0; i < 40; i )
{
seats[i] = new JButton();//creating the buttons
//better to set the preferred size of the button
seats[i].setPreferredSize(new Dimension(50,25));
panel4seating.add(seats[i]);
}
add(panel4seating, BorderLayout.CENTER);
}
}
- Графические интерфейсы должны быть созданы на EDT (моя лень).
- Используйте верблюжий регистр для имен.
- В этом случае нет необходимости расширять ни
JFrame
, ниJPanel
.
Другие (недокументированные) изменения в исходном коде являются улучшениями. Если у вас есть вопросы по какой-либо части изменений, задавайте.
Комментарии:
1. большое вам спасибо, это работает? можете ли вы проверить, правильно ли я выполняю прослушиватель действий? я пытаюсь создать таблицу рассадки, и всякий раз, когда нажимается эта кнопка, выполняется действие. Я хочу ссылаться на кнопку, используя ее индекс. и если я добавлю другую JPanel с другим набором кнопок, буду ли я использовать тот же ActionListener
Ответ №2:
Вы создаете new JPanel
в seatingPanel
конструкторе, но не добавляете его в seatingPanel
сам конструктор, поэтому он вообще не будет отображаться.
Попробуйте добавить это в макет seatingPanel.
(Или полностью удалите эту подпанель — установите макет сетки и кнопки непосредственно на свой seatingPanel
.)