【问题标题】:Put a JTextArea in specific location将 JTextArea 放在特定位置
【发布时间】:2016-10-27 02:48:52
【问题描述】:

我想知道,我怎样才能将我的JTextArea 放在我程序中的一些按钮下方...为了向您展示我想如何订购这个,我在 GUI 中做了一个示例。

图片示例:

基本上,我想将它们放在按钮上,就像在示例中一样。 我尝试将 JPanel 作为 flowlayout,并添加 JTextArea,但不起作用。

【问题讨论】:

    标签: java swing layout layout-manager jtextarea


    【解决方案1】:

    您可以使用 BorderLayout 并将 JTextArea 添加到 Center 并将按钮面板的布局设置为 FlowLayout 并将其添加到 North。如果您需要带代码的 hep,请告诉我。

    【讨论】:

    • 也感谢 Beniton,非常感谢您的帮助和时间。
    【解决方案2】:

    这是一个示例,建议BorderLayout 适合主面板。

    为了更接近您的示例,我在北面板添加了一个边距(一个空边框),并在按钮之间添加了一个水平支柱(对北面板使用了BoxLayout)。

    JFrame frame = new JFrame();
    
    JPanel contentPanel = new JPanel();
    
    contentPanel.setLayout(new BorderLayout());
    
    JPanel buttonsPanel = new JPanel();
    buttonsPanel.setLayout(new BoxLayout(buttonsPanel, BoxLayout.X_AXIS));
    buttonsPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
    
    JButton b1 = new JButton("B1");
    JButton b2 = new JButton("B2");
    
    buttonsPanel.add(b1);
    buttonsPanel.add(Box.createHorizontalStrut(5));
    buttonsPanel.add(b2);
    
    contentPanel.add(buttonsPanel, BorderLayout.NORTH);
    contentPanel.add(new JTextArea(), BorderLayout.CENTER);
    
    frame.setContentPane(contentPanel);
    frame.setSize(400, 300);
    frame.setVisible(true);
    

    【讨论】:

    • 谢谢Berger,这是我需要的,我试了几个小时还是不行,我在我的框架中使用了一个边框布局并将一个Jpanel作为流程布局来添加我的按钮,但是当我想放jtextarea,没什么用...但是我尝试使用您的代码并运行。感谢您的时间和帮助,我真的很感激。
    • 使用new EmptyBorder(10, 10, 10, 10),您可以硬编码使用的空间量。这不是便携式的。
    【解决方案3】:

    BorderLayout 和大多数其他布局管理器(例如 BoxLayoutGridBagLayout)的问题在于它们以像素为单位设置组件之间的间隙。这是不可移植的,因为在不同的屏幕上布局会 看起来不一样。如果您在 19" 显示器上创建 UI,它看起来不会 在 32" 显示器上很好。现在我们谈论的是 Java 应用程序,其中可移植性是最重要的。

    幸运的是,通过GroupLayoutMigLayout,我们可以创建真正可移植的 UI。

    package com.zetcode;
    
    import javax.swing.BorderFactory;
    import javax.swing.JButton;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JTextArea;
    import javax.swing.SwingUtilities;
    import net.miginfocom.swing.MigLayout;
    
    public class MigLayoutTwoButtonsEx extends JFrame {
    
        public MigLayoutTwoButtonsEx() {
    
            initUI();
        }
    
        private void initUI() {
    
            JButton btn1 = new JButton("B1");
            JButton btn2 = new JButton("B2");
            JTextArea area = new JTextArea(15, 28);
            area.setBorder(BorderFactory.createEtchedBorder());
    
            createLayout(btn1, btn2, area);
    
            setTitle("MigLayout example");
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    
        private void createLayout(JComponent... arg) {
    
            setLayout(new MigLayout("gap 5lp 7lp"));
    
            add(arg[0], "split 2");
            add(arg[1], "wrap");
            add(arg[2], "push, grow, span");
            pack();
        }
    
        public static void main(String[] args) {
    
            SwingUtilities.invokeLater(() -> {
                MigLayoutTwoButtonsEx ex = new MigLayoutTwoButtonsEx();
                ex.setVisible(true);
            });
        }
    }
    

    这是MigLayout 经理的示例。

    setLayout(new MigLayout("gap 5lp 7lp"));
    

    我们使用逻辑像素来定义我们的差距。

    截图:

    【讨论】:

    • 谢谢 Jan,抱歉回答得太晚了,但我有一段时间没有登录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多