我不明白为什么只有"登录现有帐户"是唯一显示的按钮。我只需要显示2个按钮,然后创建帐户"即使我将其可见性设置为true并将其移动,因此它也不会显示,因此它不会与"登录到现有帐户"重叠。
public class HotelBookingSystem extends JFrame
{
Container con;
public HotelBookingSystem()
{
super("Booking System");
JFrame mainWindow = new JFrame("Booking");
mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainWindow.setSize(350,400);
mainWindow.setVisible(true);
con = getContentPane();
BorderLayout myLayout = new BorderLayout();
con.setLayout(myLayout);
JButton login = new JButton ("Login to existing account");
JButton register = new JButton ("Create Account");
JPanel loginPanel = new JPanel();
JPanel registerPanel = new JPanel();
loginPanel.add(login, BorderLayout.NORTH);
registerPanel.add(register, BorderLayout.SOUTH);
login.setSize(350, 100);
register.setSize(350, 100);
loginPanel.setVisible(true);
registerPanel.setVisible(true);
mainWindow.add(login);
mainWindow.add(register);
mainWindow.add(loginPanel);
mainWindow.add(registerPanel);
login.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
mainWindow.setVisible(false);
}
});
register.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
mainWindow.setVisible(false);
}
});
}
public static void main(String[] args)
{
HotelBookingSystem dataBaseAccess = new HotelBookingSystem();
}
}
答案 0 :(得分:0)
您是否尝试为包含JButtons的面板使用不同的布局?
由于您有两个不同的面板,一个按钮位于loginPanel的最顶部,另一个按钮位于registerPanel的最底部。
相反,尝试将它们放在同一个面板中,一个位于NORTH,另一个位于CENTER中。
答案 1 :(得分:0)
许多问题:
mainWindow.setVisible(true);
在将所有组件添加到框架后,框架应该可见,因此这应该是构造函数中的最后一个语句。
con = getContentPane();
BorderLayout myLayout = new BorderLayout();
con.setLayout(myLayout);
JFrame内容窗格的默认布局管理器是BorderLayout,因此不需要此代码。
login.setSize(350, 100);
register.setSize(350, 100);
不要尝试设置组件的大小。布局管理器的工作是设置每个组件的大小和位置。
JPanel loginPanel = new JPanel();
JPanel registerPanel = new JPanel();
loginPanel.add(login, BorderLayout.NORTH);
registerPanel.add(register, BorderLayout.SOUTH);
为什么要创建两个面板?您只需将按钮直接添加到框架即可。
此外,JPanel的默认布局管理器是FlowLayout。因此,您不仅可以使用BorderLayout约束并期望它能够正常工作。
loginPanel.setVisible(true);
registerPanel.setVisible(true);
默认情况下,所有Swing组件(JFrame,JDialog等除外)都是可见的,因此上面的代码是不必要的。
mainWindow.add(login);
mainWindow.add(register);
mainWindow.add(loginPanel);
mainWindow.add(registerPanel);
如前所述,框架的默认布局是BorderLayout。如果未指定约束,则组件将转到“CENTER”。但是,一次只能在中心显示一个组件。
解决所有其他问题,然后尝试类似:
mainWindow.add(login, BorderLayout.NORTH);
mainWindow.add(register, BorderLayout.SOUTH);
mainWindow.add(loginPanel, BorderLayout.WEST);
mainWindow.add(registerPanel, BorderLayout.EAST);
看到差异。根据需要调整约束。
我建议您阅读Layout Manager上的Swing教程中有关工作示例的部分,以了解使用每个布局管理器的基础知识。