繁体   English   中英

如何使jframe中的jpanel可见

[英]how to make jpanel in jframe visible

我尝试用Java编写一个小游戏菜单。 我认为最好有一个Window类(扩展JFrame),然后在其中为不同的屏幕(Menue,Game,GameOver等)放置一个JPanel。如果我直接将按钮和其他东西放到JFrame中,那么一切都变了正确,但是当我尝试将JPanel放入JFrame时不起作用。 这是代码:

   public class Window extends JFrame{



    private final int WIDTH = 800;
    private final int HEIGTH = 600;
    private final int QUADRAT = 50;

    JButton startButton;
    JButton exitButton;
    JButton anleitungButton;
    JLabel gameTitle;

    public Window() {
        super("Study Run");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(null);
        setSize(WIDTH, HEIGTH);
        setResizable(false);
        getContentPane().add(new MenuePanel());
        setVisible(true);
        setLocationRelativeTo(null);

    }

这是我的小组:

public class MenuePanel extends JPanel{

JButton startButton;
JButton exitButton;
JButton anleitungButton;
JLabel gameTitle;


public MenuePanel() {
    super();
    setBackground(Color.CYAN);

    gameTitle = new JLabel("StudyRun", SwingConstants.CENTER);
    gameTitle.setBounds(200, 25, 400, 75);
    gameTitle.setFont(new Font("Arial", Font.ITALIC, 36));
    add(gameTitle);

    startButton = new JButton("start");
    startButton.setBounds(325, 125, 150, 50);
    add(startButton);
    anleitungButton = new JButton("anleitung");
    anleitungButton.setBounds(325, 200, 150, 50);
    add(anleitungButton);
    exitButton = new JButton("exit");
    exitButton.setBounds(325, 450, 150, 50);
    add(exitButton);

    CloseListener closeListener = new CloseListener();
    StartListener startListener = new StartListener();
    AnleitungListener anleitungListener = new AnleitungListener();
    startButton.addActionListener(startListener);
    anleitungButton.addActionListener(anleitungListener);
    exitButton.addActionListener(closeListener);
}

我在网上找到的唯一帮助是,在将框架设置为可见之前,我需要添加面板。 那没用。 将pack()或revalidate()放在代码中的任何地方也不起作用。 将面板设置为不透明或可见也无济于事。 我不知道还能尝试什么?

您的问题在这里:

setLayout(null);

当您使用空布局, 的编码器是所有添加的组件的位置和大小负完全责任。 您添加的组件没有大小,因此默认为0、0。

一个(不好的)解决方案:给MenuePanel一个大小或界限

更好的解决方案:学习和使用布局管理器(正如您确信所有搜索都已告诉您的那样)。

最好记住,Java使用Flowlayout()作为默认值。

 public Window() {

    setLayout(new FlowLayout());
}

因此,您基本上按照上一个答案中的说明将布局覆盖为null。此外,如果您打算使用不同的类和面板从不同的类添加到JFrame,请使用getter

class SomePanel{
public JComponent getPanel(){
return panel;
 }
}

然后添加到JFrame。

class MyFrame{
add(new SomePanel().getPanel());

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM