退出按钮覆盖整个屏幕

时间:2016-12-19 15:58:52

标签: java swing button

退出按钮覆盖了整个屏幕出了什么问题?

我设置的边界覆盖文本Exit,因此边界为x-280,y-385,width-70,height-20。

覆盖整个画面的按钮图像

The Image of the button covering the whole Frame

注意:我在我的笔记本电脑上尝试了相同的代码并且工作得非常好但是当我在学校的计算机上运行时它开始表现得很奇怪!

 import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.*;
    import javax.swing.*;

@SuppressWarnings({ "unused", "serial" })
public class FinalBlowzXC extends JFrame{

    public JLabel bgmainmenu;
    public JButton start;
    public JButton exit;
    public static JPanel mainmenu;
    public static JPanel login;

    public static void main(String []args)
    {
        new FinalBlowzXC().setVisible(true);
    }

    public FinalBlowzXC()
    {
        super("Final Blowz Xchanged");
        setSize(640,480);
        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        bgmainmenu = new JLabel();
        start = new JButton();
        exit = new JButton();

        mainmenu=new JPanel();

        bgmainmenu.setIcon(new ImageIcon(getClass().getResource("/FF-XV.jpg")));
        bgmainmenu.setBounds(0,0,640,480);
        add(bgmainmenu);
        add(start);
        start.setBounds(280, 360, 70, 20);
        start.setBorder(null);
        start.setBorderPainted(false);
        start.setContentAreaFilled(false);
        start.setOpaque(false);
        start.addActionListener(new Start());
        exit.setBounds(280, 385, 70, 20);
        add(exit);
        exit.setBorder(null);
        exit.setBorderPainted(false);
        exit.setContentAreaFilled(false);
        exit.setOpaque(false);
        exit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e)
            {
                System.exit(0);
            }
        });       

    }

    }

2 个答案:

答案 0 :(得分:3)

框架内容窗格的默认布局管理器是BorderLayout。将组件添加到BorderLayout并且未指定约束时,组件将转到CENTER。只有最后添加的组件才能显示在CENTER

因此,如果要显示多个按钮,则需要在框架中嵌套面板。类似的东西:

JPanel buttonPanel = new JPanel();
buttonPanel.add(start);
buttonPanel.add(exit);
add(buttonPanel, BorderLayout.PAGE_START);

阅读Using Layout Managers上Swing教程中的部分,了解有关BorderLayout如何运作的更多信息和示例。

答案 1 :(得分:1)

JFrame的内容窗格有BorderLayout作为默认布局管理器,当您使用add(Component comp)向其添加内容时,它会被添加到中心,并占据整个内容空间。

除非容器的布局为空(setLayout(null)),否则设置边界是没有用的。

使用null布局时,会考虑您的边界,但建议您选择适合您需求的真实布局管理器。

见这里:A Visual Guide to Layout Managers