【问题标题】:How to make swing components different sizes如何制作不同尺寸的秋千组件
【发布时间】:2018-05-15 16:50:04
【问题描述】:

如何在 java 中为 Swing 组件制作特定的尺寸? gui 应该是这样的......

+++++++++++++++++
+  TextField    +
+++++++++++++++++
+               +
+  TextPane     +
+               +
+++++++++++++++++
+Button +Button +
+++++++++++++++++

我尝试过BorderLayoutGridLayout、嵌套JPanels 等,但我无法获得一个好看的gui,其中JButtons 不像砖块,JTextField 不像文本大小的三倍。

【问题讨论】:

    标签: java swing user-interface layout layout-manager


    【解决方案1】:

    部分取决于您希望如何分配额外空间。此 GUI 为文本字段和文本区域提供额外的宽度,同时保持按钮居中。为文本区域提供了额外的高度。

    import java.awt.BorderLayout;
    import java.awt.FlowLayout;
    import javax.swing.*;
    
    public class BasicLayout {
    
        BasicLayout() {
            JPanel gui = new JPanel(new BorderLayout(2,2));
    
            gui.add(new JTextField(), BorderLayout.PAGE_START);
            gui.add(new JTextArea(3,15));
    
            JPanel controls = new JPanel(new FlowLayout(FlowLayout.CENTER,5,5));
            controls.add(new JButton("Button1"));
            controls.add(new JButton("Button2"));
    
            gui.add(controls, BorderLayout.PAGE_END);
    
            JOptionPane.showMessageDialog(null, gui);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    new BasicLayout();
                }
            });
        }
    }
    

    更新

    一开始我以为你指的是中间部分的JTextArea,后来我仔细看了看。 JTextPane 的大小稍微有点棘手,因为它不接受构造函数中的大小提示。为此,我们可以为其调整容器的首选大小(在本例中为JScrollPane

    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import javax.swing.*;
    
    public class BasicLayout {
    
        BasicLayout() {
            JPanel gui = new JPanel(new BorderLayout(2,2));
    
            gui.add(new JTextField(), BorderLayout.PAGE_START);
            JTextPane text = new JTextPane();
            JScrollPane scroll = new JScrollPane(text);
            Dimension d = text.getPreferredSize();
            scroll.setPreferredSize(new Dimension(d.width, d.height*3));
            gui.add(scroll);
    
            JPanel controls = new JPanel(new FlowLayout(FlowLayout.CENTER,5,5));
            controls.add(new JButton("Button1"));
            controls.add(new JButton("Button2"));
    
            gui.add(controls, BorderLayout.PAGE_END);
            JOptionPane.showMessageDialog(null, gui);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    new BasicLayout();
                }
            });
        }
    }
    

    【讨论】:

      【解决方案2】:

      LayoutManager 用于简化特定的布局。在您的情况下,您似乎想做一些特定的事情,所以不要使用布局管理器!

      在 oracle 网站上有一个很好的布局指南。本指南的一部分是如何不使用它: http://docs.oracle.com/javase/tutorial/uiswing/layout/none.html

      祝你的项目好运!

      【讨论】:

        【解决方案3】:

        如果您正在寻找在 Netbeans 中设计 GUI,这是可能的。创建 Java 项目后,选择项目并转到:

        File > New File
        

        然后会出现对话框(您已经知道)。

        在类别中,选择Swing GUI Forms,然后从选项中选择您想要的任何内容

        这是截图

        【讨论】:

          【解决方案4】:

          最好的方法是使用 .setBounds(X, Y, Length, Width) 您可以设置项目的精确定位。它是从左上角开始测量 X 和 Y。对于宽度,它会随着时间向左增长,并且不会移动 X。长度和 Y 值也是如此。

          JTextField field = new JTextField(),
          field.setBounds(500, 100, 100, 30);
          add(field);
          

          【讨论】:

          • “最好的方法是使用 .setBounds” 不,不是。使用适当的布局。
          猜你喜欢
          • 2017-03-25
          • 2011-02-17
          • 2020-12-26
          • 2011-08-14
          • 1970-01-01
          • 2023-02-26
          • 1970-01-01
          • 1970-01-01
          • 2018-01-27
          相关资源
          最近更新 更多