为什么我的按钮没有显示出来?
问题描述:
我想创建一个按钮阵列作为一个座位图的模拟,但按钮不会显示在屏幕上只有框架出现。我究竟做错了什么?为什么我的按钮没有显示出来?
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();
答
你创造seatingPanel
的构造一个新的JPanel
,但你不能将它添加到seatingPanel
本身,因此它不会显示在所有。
尝试将其添加到seatingPanel的布局。
(或者废除完全是子面板 - 设置网格布局和按钮直接向您的seatingPanel
)
答
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
。
对源代码的其他(无证)更改是改进。如果您对更改的任何部分有疑问,请询问。
非常感谢你的工作?你能检查我是否正在做动作监听器吗?即时通讯试图创建一个座位图,每当按钮被点击一个动作执行。我想使用索引来引用按钮。如果我用另一组按钮添加另一个JPanel,我将使用相同的actionListener – dave 2011-06-11 11:08:01