由于某种原因,最后添加的按钮不会显示。我尝试重新排序它们但仍然是相同的结果。我检查了坐标,它们是正确的。
最后3是我遇到问题的地方。最后一个"添加"按钮没有显示。
public class MainScreen extends Frame implements MouseListener{
HowToPlay otherFrame;
Button start, howto, settings, about ;
Image MainMenu;
MainScreen(){
Toolkit tkMM = Toolkit.getDefaultToolkit();
MainMenu = tkMM.getImage(this.getClass().getResource("MainMenu.jpg"));
otherFrame = new HowToPlay();
Button start = new Button ("Start Game");
start.setBounds(98, 333, 326, 51);
Button howto = new Button ("How to Play");
howto.setBounds(98, 389, 326, 29);
howto.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setVisible(false);
otherFrame.setVisible(true);
}
});
Button settings = new Button ("Settings");
settings.setBounds(98, 424, 326, 29);
Button about = new Button ("About");
about.setBounds(98, 462, 326, 29);
about.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setVisible(false);
otherFrame.setVisible(true);
}
});
add(start);
add(howto);
add(settings);
add(about);
setVisible(true);
setSize(500, 500);
setResizable(false);
setLayout(null);
setLocationRelativeTo(null); // Center the frame
setSize(500,500);//size of the canvass
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
super.windowClosed(e);
System.exit(0);
}
});
}
答案 0 :(得分:1)
您的问题是,在添加所有组件后,您最后会调用<cam:message xmlns:cam="urn:xxx:1.0:logging">
....
。要解决此问题,请在开头调用它:
setLayout(null);
话虽如此,我强烈建议您避免使用MainScreen() {
setLayout(null);
Toolkit tkMM = Toolkit.getDefaultToolkit();
//.....
布局和null
e.g。
setBounds
答案 1 :(得分:1)
哇,它很有用。仍然对消失的按钮问题感到困惑。
默认布局管理器是BorderLayout。
在未指定约束的情况下向BorderLayout添加组件时,组件将添加到CENTER。但是,只有一个组件可以添加到中心,因此添加的最后一个组件(“约”按钮)将由布局管理器处理。
当您调用setVisible(true)
方法时,将调用布局管理器,并为“约”按钮指定大小/位置。所有其他按钮都被忽略,因为BorderLayout不关心它们。
但是,框架的大小是(0,0),因此没有空间可以分配给“约”按钮,因此它的高度为0,这实际上意味着没有任何东西可以绘制。
因此,当框架被绘制时,其他3个按钮正确绘制,但不是“约”按钮。
将代码更改为:
setSize(500, 500);
setVisible(true);
看看会发生什么。
答案 2 :(得分:0)
Frame的默认布局管理器是BorderLayout。当您使用add(item)项目放在中心时,替换那里的任何内容。 您需要使用不同的布局管理器