【问题标题】:Alignment of components in panel面板中组件的对齐方式
【发布时间】:2019-05-24 11:52:00
【问题描述】:

我需要在JPanel 中垂直对齐组件(2 个JTextFields 和1 个JTextArea),然后将此面板放置在已定义框架的中心。

我想要完全一样的。

我试图通过为面板设置不同的布局来做到这一点,但我无法让它工作。在下面的代码中,面板上没有任何内容就可以了。如果我将组件添加到面板,它的行为会有所不同。组件在面板中水平显示。

public class DialogboxExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("BoxLayout Example X_AXIS");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();

        JLabel lblPhone = new JLabel("Name");
        lblPhone.setBounds(65, 68, 46, 14);
        frame.getContentPane().add(lblPhone);

        JTextField  textField_1 = new JTextField();
        textField_1.setBounds(136, 65, 247, 22);
        frame.getContentPane().add(textField_1);
        textField_1.setColumns(10);

        JLabel lblEmailId = new JLabel("Category");
        lblEmailId.setBounds(65, 115, 70, 14);
        frame.getContentPane().add(lblEmailId);

        JTextField textField_2 = new JTextField();
        textField_2.setBounds(136, 112, 247, 22);
        frame.getContentPane().add(textField_2);
        textField_2.setColumns(10);

        JLabel lblAddress = new JLabel("Description");
        lblAddress.setBounds(65, 162, 150, 14);
        frame.getContentPane().add(lblAddress);

        JTextArea  textArea_1 = new JTextArea();
        textArea_1.setBounds(136, 157, 300, 100);
        frame.getContentPane().add(textArea_1);

        frame.setSize(300, 300);
        frame.getContentPane().add( panel, "Center");
        frame.pack();
        frame.setVisible(true);
    }
}

我希望JTextFields 和JTextArea 垂直堆叠。

有人可以帮我解决这个问题吗?

如果我将GridLayout 添加到面板中,效果会很好,但所有 3 个组件的组件大小相同。

【问题讨论】:

  • 以最小尺寸提供 ASCII 艺术或 GUI 的 预期 布局的简单绘图,如果可调整大小,则具有更大的宽度和高度 - 以显示额外空间应该如何被使用。

标签: java swing layout-manager


【解决方案1】:
  1. “我试图通过为面板设置不同的布局来做到这一点” GUI 很少使用一种布局。在这个中,我可能会使用 GridBagLayoutnot GridLayout) 作为标签和文本字段/区域),然后将该面板放在另一个 GridBagLayout 中以使其居中JFrame。 (如果我正确理解了要求,我不确定我是否正确。)
  2. 如果将JLabel 用于Description 而不是TitledBorder,它会变得更加复杂。
  3. setBounds(..) 将被忽略使用任何值得使用的布局。指定列以建议文本字段的宽度以及文本区域的列和行。
  4. DialogboxExample 不是很准确,因为 JFrame 用于显示 GUI。它很可能应该使用JDialog,但坚持使用框架可能会导致如下结果:

【讨论】:

  • SO 不是编码服务。根据编号列表中的建议(至少第 1、2 和 3 点),尽力而为。如果失败,请编辑您的帖子以显示您的尝试。
  • 谢谢安德鲁!!它对我提到的第一个点有用
  • 很高兴你把它整理好了。如果它有助于解决问题,请accept the answer
猜你喜欢
  • 2010-12-13
  • 2012-03-01
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多