Java 按钮定位,不显示

Java 按钮定位,不显示,java,swing,jbutton,layout-manager,cardlayout,Java,Swing,Jbutton,Layout Manager,Cardlayout,在我的代码中,我有一个JFrame,它打开了一个主菜单,在该菜单中,您可以单击options,这将带您进入options菜单。在这个选项菜单上,我想创建一个后退按钮,它将自己定位在屏幕左上角的某个位置。当我运行程序并进入选项菜单时,JButton不会出现。我的代码一定有问题。有什么帮助吗?下面是我第一次声明JButton的地方 static JButton optionsBackButton = new JButton("<html><font size = 5

在我的代码中,我有一个JFrame,它打开了一个主菜单,在该菜单中,您可以单击options,这将带您进入options菜单。在这个选项菜单上,我想创建一个后退按钮,它将自己定位在屏幕左上角的某个位置。当我运行程序并进入选项菜单时,JButton不会出现。我的代码一定有问题。有什么帮助吗?下面是我第一次声明JButton的地方

    static JButton optionsBackButton = new JButton("<html><font size = 5 
           color = green>Back</font></html>"); 
    //Options Menu
    JPanel optionsPanel = new JPanel();
    JLabel optionsOptionsTitle = new JLabel("<html><font size = 7 color = blue>Options</font></html>");
    JPanel optionsOptionsTitlePanel = new JPanel();
    JPanel optionsBackButtonPanel = new JPanel();

    optionsPanel.setLayout(null);
    optionsBackButton.setBounds(100,100,50,50);

    optionsBackButtonPanel.add(optionsBackButton);
    optionsOptionsTitlePanel.add(optionsOptionsTitle);
    optionsPanel.add(optionsOptionsTitlePanel);
    optionsPanel.add(optionsBackButtonPanel);

    optionsBackButton.addActionListener(this);

    //Add panels to the card
    panel.add("Home Screen", homePanel);
    panel.add("Options Menu", optionsPanel);
    //card.add("Game screen", gamePanel);
    cardLayout.show(panel, "HomeScreen");
    contentPane.add(panel);
静态JButton选项backbutton=新JButton(“Back”);
下面是与JButton相关的代码的另一部分

    static JButton optionsBackButton = new JButton("<html><font size = 5 
           color = green>Back</font></html>"); 
    //Options Menu
    JPanel optionsPanel = new JPanel();
    JLabel optionsOptionsTitle = new JLabel("<html><font size = 7 color = blue>Options</font></html>");
    JPanel optionsOptionsTitlePanel = new JPanel();
    JPanel optionsBackButtonPanel = new JPanel();

    optionsPanel.setLayout(null);
    optionsBackButton.setBounds(100,100,50,50);

    optionsBackButtonPanel.add(optionsBackButton);
    optionsOptionsTitlePanel.add(optionsOptionsTitle);
    optionsPanel.add(optionsOptionsTitlePanel);
    optionsPanel.add(optionsBackButtonPanel);

    optionsBackButton.addActionListener(this);

    //Add panels to the card
    panel.add("Home Screen", homePanel);
    panel.add("Options Menu", optionsPanel);
    //card.add("Game screen", gamePanel);
    cardLayout.show(panel, "HomeScreen");
    contentPane.add(panel);
//选项菜单
JPanel选项面板=新JPanel();
JLabel Options Options title=新JLabel(“选项”);
JPanel options options titlepanel=新的JPanel();
JPanel选项BackButtonPanel=新建JPanel();
optionsPanel.setLayout(空);
选项BackButton.setBounds(100100,50,50);
选项BackButton Panel.add(选项BackButton);
选项选项标题面板添加(选项标题);
选项面板。添加(选项选项标题面板);
选项面板。添加(选项BackButtonPanel);
选项BackButton.addActionListener(此选项);
//将面板添加到卡中
面板。添加(“主屏幕”,主面板);
面板。添加(“选项菜单”,选项面板);
//添加(“游戏屏幕”,游戏面板);
cardLayout.show(面板,“主屏幕”);
contentPane.add(面板);

您的问题源于使用
null
布局。注:

JPanel optionsBackButtonPanel = new JPanel(); // holds the back button
                                              // but never given a size

optionsPanel.setLayout(null);    // uh oh,.... bad news
optionsBackButton.setBounds(100,100,50,50);   // yes you set the bounds of the button

optionsBackButtonPanel.add(optionsBackButton);
optionsOptionsTitlePanel.add(optionsOptionsTitle);
optionsPanel.add(optionsOptionsTitlePanel);
optionsPanel.add(optionsBackButtonPanel);  // again, optionsBackButtonPanel 
                              // has been never given a size or location/bounds

optionsBackButton.addActionListener(this);
因此,您设置了按钮的边界,并将其添加到使用默认
FlowLayout
的JPanel中,因此边界没有意义。然后,将从未设置边界的JPanel添加到使用空布局的JPanel中。因此,选项BackButton面板将永远不会显示

解决方案:不要使用空布局,而是学习和使用布局管理器

虽然空布局和
setBounds()
可能会像创建复杂GUI的最简单和最好的方式一样吸引新手,但您创建的GUI越多,在使用它们时遇到的困难就越严重。当GUI调整大小时,它们不会调整您的组件的大小,它们是一个需要增强或维护的皇家女巫,当它们放置在滚动窗格中时会完全失败,当在所有平台或屏幕分辨率与原始分辨率不同的情况下查看时,它们看起来非常糟糕


从这里开始:

您有很多需要纠正的地方,包括过度使用静态字段,在可能应该使用JDialog的地方使用JFrame,最重要的是使用
null
布局和
setBounds(…)
在应该使用有效布局管理器的地方。要获得更全面的帮助,请发布您最好的,让我们帮助您改进。