Java AWT - 添加的最后一个按钮没有显示出来

时间:2015-09-11 15:42:45

标签: java button awt

由于某种原因,最后添加的按钮不会显示。我尝试重新排序它们但仍然是相同的结果。我检查了坐标,它们是正确的。

最后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);
        }
    });
}

3 个答案:

答案 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)项目放在中心时,替换那里的任何内容。 您需要使用不同的布局管理器