netbeans IDE中的JFrame与相同的运行

smtd7mpg  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(168)

我的问题不是那么大,但很烦人。
在我的IDE(Netbeans 12.6)中查看我的JFrame
Frame within IDE
(Pay注意文本字段的距离)
现在,请看运行的相同框架:
Frame running
你看到区别了吗?这太不舒服了。
我该怎么做才能使跑步框架中的元素距离相等?
PS:框架被设置为不可调整大小(可能此信息有用)。

lymnna71

lymnna711#

在此之前,我从未使用过NetBeans IDE,更不用说它的GUI builder了。它实际上非常强大。尽管它允许不了解Swing的人创建一个可工作的应用程序,但我相信它的真实的目的是让有经验的程序员不必编写 Swing 应用程序所需的大量样板代码。换句话说,为了最大限度地利用NetBeans GUI构建器,您需要对 Swing 有一个全面的了解,而这只能通过编写大量 Swing 代码(而不是让GUI构建器为您生成代码)来获得。我认为NetBeans GUI构建器是为 Swing 大师而不是 Swing 学徒准备的。
默认情况下,NetBeans GUI生成器使用GroupLayout,我假设它是您代码中使用的布局管理器,但这似乎给您带来了一个问题-否则您就不会发布您的问题了。因此,您需要使用嵌套的JPanel,并为每个JPanel使用适当的布局管理器-这就是我所做的。
下面是NetBeans IDE得屏幕截图,其中显示了嵌套面板得层次结构.

JFrame的[内容窗格]的布局管理器是BorderLayout。如您在上图左下角的“树”中所见,JFrame包含三个面板,即topPanel(其布局管理器是BoxLayout),resultPanelbottomPanel(它们都将FlowLayout作为它们的布局管理器)。希望您现在能够理解“树”的其余部分。
现在来看看GUI顶部的JTextField之间的空间问题。正如您所看到的,我使用了GridBagLayout,因为它将确保文本字段的位置(相对于彼此)将保持不变。请注意,可能有其他布局管理器,也将给予你同样的结果,但我会让你调查其他选项,如果你这样的愿望。也许看看JGoodies FormLayout,注意我自己从来没有用过。
为了完成这个答案,下面是代码(完全由NetBeans生成)。但是,我确实注解掉了设置look-and-feel的代码。另外,下面的代码只创建和显示GUI。当您单击JButton时,它们什么也不做。

/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/GUIForms/JFrame.java to edit this template
 */
package guibuild;

public class NbGuiBld extends javax.swing.JFrame {

    /**
     * Creates new form NbGuiBld
     */
    public NbGuiBld() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        buttonGroup = new javax.swing.ButtonGroup();
        topPanel = new javax.swing.JPanel();
        dataPanel = new javax.swing.JPanel();
        formPanel = new javax.swing.JPanel();
        nameLabel = new javax.swing.JLabel();
        nameTextField = new javax.swing.JTextField();
        weightLabel = new javax.swing.JLabel();
        weightTextField = new javax.swing.JTextField();
        heightLabel = new javax.swing.JLabel();
        heightTextField = new javax.swing.JTextField();
        genderPanel = new javax.swing.JPanel();
        maleRadioButton = new javax.swing.JRadioButton();
        femaleRadioButton = new javax.swing.JRadioButton();
        buttonsPanel = new javax.swing.JPanel();
        clearButton = new javax.swing.JButton();
        calculateButton = new javax.swing.JButton();
        resultPanel = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        bottomPanel = new javax.swing.JPanel();
        exitButton = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("BMI Calculator");

        topPanel.setPreferredSize(new java.awt.Dimension(538, 220));
        topPanel.setLayout(new javax.swing.BoxLayout(topPanel, javax.swing.BoxLayout.PAGE_AXIS));

        dataPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Personal Info"));
        dataPanel.setLayout(new javax.swing.BoxLayout(dataPanel, javax.swing.BoxLayout.PAGE_AXIS));

        formPanel.setPreferredSize(new java.awt.Dimension(526, 130));
        formPanel.setLayout(new java.awt.GridBagLayout());

        nameLabel.setText("Enter your name:");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 40);
        formPanel.add(nameLabel, gridBagConstraints);

        nameTextField.setColumns(15);
        nameTextField.setMinimumSize(new java.awt.Dimension(171, 22));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridy = 1;
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 10, 40);
        formPanel.add(nameTextField, gridBagConstraints);

        weightLabel.setText("Enter your weight (kg):");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 40);
        formPanel.add(weightLabel, gridBagConstraints);

        weightTextField.setColumns(10);
        weightTextField.setMinimumSize(new java.awt.Dimension(116, 22));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 10, 40);
        formPanel.add(weightTextField, gridBagConstraints);

        heightLabel.setText("Enter your height (cm):");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
        formPanel.add(heightLabel, gridBagConstraints);

        heightTextField.setColumns(10);
        heightTextField.setMinimumSize(new java.awt.Dimension(116, 22));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.insets = new java.awt.Insets(0, 0, 10, 0);
        formPanel.add(heightTextField, gridBagConstraints);

        dataPanel.add(formPanel);

        genderPanel.setLayout(new java.awt.FlowLayout(1, 20, 5));

        buttonGroup.add(maleRadioButton);
        maleRadioButton.setText("male");
        genderPanel.add(maleRadioButton);

        buttonGroup.add(femaleRadioButton);
        femaleRadioButton.setText("female");
        genderPanel.add(femaleRadioButton);

        dataPanel.add(genderPanel);

        topPanel.add(dataPanel);

        buttonsPanel.setPreferredSize(new java.awt.Dimension(824, 70));
        buttonsPanel.setLayout(new java.awt.FlowLayout(1, 20, 5));

        clearButton.setText("Clear");
        buttonsPanel.add(clearButton);

        calculateButton.setText("Calculate");
        buttonsPanel.add(calculateButton);

        topPanel.add(buttonsPanel);

        getContentPane().add(topPanel, java.awt.BorderLayout.PAGE_START);

        resultPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Result"));

        jTextArea1.setColumns(60);
        jTextArea1.setRows(15);
        jScrollPane1.setViewportView(jTextArea1);

        resultPanel.add(jScrollPane1);

        getContentPane().add(resultPanel, java.awt.BorderLayout.CENTER);

        bottomPanel.setLayout(new java.awt.FlowLayout(4));

        exitButton.setText("Exit");
        bottomPanel.add(exitButton);

        getContentPane().add(bottomPanel, java.awt.BorderLayout.PAGE_END);

        pack();
    }// </editor-fold>                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(NbGuiBld.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(NbGuiBld.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(NbGuiBld.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(NbGuiBld.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
         */
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NbGuiBld().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JPanel bottomPanel;
    private javax.swing.ButtonGroup buttonGroup;
    private javax.swing.JPanel buttonsPanel;
    private javax.swing.JButton calculateButton;
    private javax.swing.JButton clearButton;
    private javax.swing.JPanel dataPanel;
    private javax.swing.JButton exitButton;
    private javax.swing.JRadioButton femaleRadioButton;
    private javax.swing.JPanel formPanel;
    private javax.swing.JPanel genderPanel;
    private javax.swing.JLabel heightLabel;
    private javax.swing.JTextField heightTextField;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JRadioButton maleRadioButton;
    private javax.swing.JLabel nameLabel;
    private javax.swing.JTextField nameTextField;
    private javax.swing.JPanel resultPanel;
    private javax.swing.JPanel topPanel;
    private javax.swing.JLabel weightLabel;
    private javax.swing.JTextField weightTextField;
    // End of variables declaration                   
}

这是我运行上面的代码时的样子。

相关问题