JPanel 使我的布局变形

JPanel deforms my Layout

我正在使用 NetBeans 为学校工作。我有一个巨大的 JPanel,其中包含一个巨大的 JFrame。该 JFrame 为 5 个小 JFrame,其中 1 个是带按钮的菜单,其他是带有文本的框,当我在按钮中选择时,这些文本将交换。 当一个盒子显示其他盒子是不可见的时,我使用以下代码(不知道它是否是最好的):

     public ConversorUI() {
            initComponents();
           PanelVazio.setVisible(true);
           PanelTemp.setVisible(false);
           PanelComp.setVisible(false);
           PanelMoedas.setVisible(false);
           this.pack();
        }

我的问题是,当我 运行 我的程序时,我有一个很大的 space,什么都没有,只有在它下面才会出现组件。我希望它们出现在我的 window 的顶部。我能做什么 ?

回答 经过一段时间的搜索后,我才意识到我可以将布局从 JPanel 设置为卡片布局,并在彼此之上创建 JPanel,并使用以下代码激活它们:

    private void DinheiroButtonActionPerformed(java.awt.event.ActionEvent evt) {                                               
        //Remove Panels
        CAIXA.removeAll();
        CAIXA.repaint();
        CAIXA.revalidate();

        //Add Panels
        CAIXA.add(DinheiroBox);
        CAIXA.repaint();
        CAIXA.revalidate();
    }        

一次可以加载一个jframe 因为您添加的每个 jframe 都有自己的位置并且可见性不会做任何删除 尝试保存每个 jframe 并进行更改 删除旧的并添加新的

看起来您正在使用 Java Swing,对吧?

如果您有包含 JFrames 的 JPanel,那么无论如何您都会做错事。要构建正确的 UI,您必须在 JFrame 中添加 JPanel。

此外,为了达到正确的组件顺序和放置,您需要配置相应的布局,here是说明。

为什么要使用多个 JFrames 来执行此操作?据我所知,使用可以处理单个任务(例如菜单和按钮等)的 JPanel 会是一个更好的主意。

我自己对使用 javax.swing 比较陌生,但据我所知,每个 window 一次只能有 1 帧(就像其他人说的那样)。

根据我从您的项目中可以看出的情况,您甚至可能不需要多个面板。您只需要一个带有按钮的菜单面板,以及根据按钮显示文本的多个标签或 JLabel。您可以在编写 addActionListener 时使用 setText 方法,如下所示:

    buttonName.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
             labelName.setText("blah blah blah");
             //and whatever else you may need to do
        }
    });