【问题标题】:Why is it not displaying my button?为什么不显示我的按钮?
【发布时间】:2017-06-06 02:21:09
【问题描述】:

我正在尝试使用分层窗格为我正在处理的程序制作菜单,但按钮不会显示。我似乎无法弄清楚它是什么......

public class FlashcardGUI {

public static void main(String[] args) 
{
    JFrame projectFrame = new JFrame("StudyFast Flashcard");
    projectFrame.setName("StudyFast Flashcards");
    projectFrame.setSize(1000,600);
    projectFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    projectFrame.setVisible(true);


    JLayeredPane projectLayeredPane = new JLayeredPane();
    projectFrame.setContentPane(projectLayeredPane);

    JPanel projectMenu1 = new JPanel();
    projectLayeredPane.setLayer(projectMenu1, 0);

    final JButton startNow = new JButton();
    startNow.setText("Exit");
    startNow.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent e) 
                {
                    System.exit(0);
                }
        });



    projectFrame.add(projectLayeredPane);
    projectLayeredPane.add(projectMenu1);
    projectMenu1.add(startNow);
    }
}

【问题讨论】:

  • 理想情况下,您应该让 FlashcardGUI 扩展 JFrame
  • @cricket_007 就我个人而言,我不会,我最多从JPanel 扩展它,它提供了更多的灵活性、可扩展性和对组件显示方式的控制
  • @MadProgrammer 都依赖于主要功能,我想
  • @cricket_007 我反对这一点,基于 16 多年的 Swing/UI 专业开发经验,框架具有更多功能、更多责任并将您锁定在一个用例中 - 恕我直言

标签: java swing user-interface button


【解决方案1】:

将这两行放在 main 方法的末尾。为了使按钮显示,顺序很重要。

projectFrame.pack();
projectFrame.setVisible(true);

(确保删除您在第 9 行已有的 projectFrame.setVisible(true);。)

【讨论】:

    【解决方案2】:

    我已经更新了您的代码,现在可以使用了。请查看内联 cmets 以了解代码中的问题。希望这会有所帮助。

    public class FlashcardGUI2 {
    
    public static void main(String[] args) {
        JFrame projectFrame = new JFrame("StudyFast Flashcard");
        projectFrame.setName("StudyFast Flashcards");
        projectFrame.setSize(1000,600);
        projectFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        projectFrame.setVisible(true);
        JLayeredPane projectLayeredPane = new JLayeredPane();
        LayoutManager layout = new FlowLayout();   //creating a FlowLayout object
        projectLayeredPane.setLayout(layout);   //adding the layout to JLayeredPane
                                                //because JLayeredPane do not have default layout of
                                                //its own. The reason you were not 
                                                //getting the button displayed
        projectLayeredPane.setPreferredSize(new Dimension(300, 310));
        JPanel projectMenu1 = new JPanel();
        final JButton startNow = new JButton();
        startNow.setText("Exit");
        startNow.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                        System.exit(0);
                    }
            });
        projectLayeredPane.add(projectMenu1,new Integer(50));
        projectLayeredPane.add(startNow,new Integer(10));
        projectFrame.add(projectLayeredPane);
        projectFrame.pack();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      相关资源
      最近更新 更多