Java 使组件只占用特定部分的空间(如2/3或9/10)

Java 使组件只占用特定部分的空间(如2/3或9/10),java,swing,layout,Java,Swing,Layout,为我使用布局会导致很多挫折,最终我使用了绝对布局,然后手动缩放组件 假设我有一个文本区域,我希望它占据屏幕的2/3。 我真正想要的是有一个包含3行的GridLayout,并强制TextArea同时获取其中的两行 例如: 第1行(被第一个文本区域占用) 第2行(被相同的文本区域占用) 第3行(被按钮占据) 这是一张使用Gridbag布局的图片(由l修改)。我希望绿色区域由单个组件占用 这只是表达我自己的一种方式,我肯定还有其他的方式(或布局)可以做到这一点。但是请注意,我也希望使用其他特定的

为我使用布局会导致很多挫折,最终我使用了绝对布局,然后手动缩放组件

假设我有一个文本区域,我希望它占据屏幕的2/3。 我真正想要的是有一个包含3行的GridLayout,并强制TextArea同时获取其中的两行

例如:

  • 第1行(被第一个文本区域占用)
  • 第2行(被相同的文本区域占用)
  • 第3行(被按钮占据)
这是一张使用Gridbag布局的图片(由l修改)。我希望绿色区域由单个组件占用

这只是表达我自己的一种方式,我肯定还有其他的方式(或布局)可以做到这一点。但是请注意,我也希望使用其他特定的刻度,例如9/10


那会节省很多时间。谢谢

学习网格布局。说真的,一旦你学会了,你就能很快地做你需要的一切。 您可能还会找到一些有用的GUI设计器。对于swing,我个人喜欢netbeans中的那个


在你学会如何使用它们之前,布局是令人沮丧的。请记住,您正在为用户创建应用程序。每当他们想调整窗口大小时,他们都会感到沮丧。你不想那样。

学习GridBagLayout。说真的,一旦你学会了,你就能很快地做你需要的一切。 您可能还会找到一些有用的GUI设计器。对于swing,我个人喜欢netbeans中的那个


在你学会如何使用它们之前,布局是令人沮丧的。请记住,您正在为用户创建应用程序。每当他们想调整窗口大小时,他们都会感到沮丧。您不希望这样。

我认为GridBagLayout在这种特殊情况下不起作用,因为您对相对宽度没有所需的控制。相反,我建议你去看看,虽然不是核心Java的一部分,但它是免费下载的,非常灵活和强大,并且可用于Swing和其他几个GUI库。

我认为GridBagLayout在这种特殊情况下不起作用,因为您对相对宽度没有所需的控制。相反,我建议您检查一下,尽管不是核心Java的一部分,但这种布局是免费下载的,它非常灵活和强大,可用于Swing和其他几个GUI库。

import Java.awt.*;
import java.awt.*;
import javax.swing.*;

public class CopyTextNorthPanel extends JPanel {

    private static final long serialVersionUID = 1L;
    private JLabel hidelLabel;
    private JLabel firstLabel;
    private JTextField firstText;

    public CopyTextNorthPanel() {

        setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
        for (int k = 0; k < 50; k++) {
            hidelLabel = new JLabel("     ");
            hidelLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
            gbc.fill = GridBagConstraints.HORIZONTAL;
            gbc.weightx = 0.5;
            gbc.weighty = 0.5;
            gbc.gridx = k;
            gbc.gridy = 0;
            add(hidelLabel, gbc);
        }
        for (int k = 0; k < 5; k++) {
            firstLabel = new JLabel("Testing Label : ", SwingConstants.RIGHT);
            firstLabel.setFont(new Font("Serif", Font.BOLD, 20));
            firstLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
            gbc.fill = GridBagConstraints.HORIZONTAL;
            gbc.insets = new Insets(0, 0, 5, 0);
            gbc.gridx = 0;
            gbc.gridwidth = 8;
            gbc.gridy = k + 1;
            add(firstLabel, gbc);
        }
        for (int k = 0; k < 5; k++) {
            firstText = new JTextField("Testing TextField");
            firstText.setFont(new Font("Serif", Font.BOLD, 20));
            firstText.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
            gbc.fill = GridBagConstraints.HORIZONTAL;
            gbc.insets = new Insets(0, 0, 5, 0);
            gbc.gridx = 9;
            gbc.gridwidth = k + 8;
            gbc.gridy = k + 1;
            add(firstText, gbc);
        }
        for (int k = 0; k < 5; k++) {
            firstLabel = new JLabel("Testing Label : ", SwingConstants.RIGHT);
            firstLabel.setFont(new Font("Serif", Font.BOLD, 20));
            firstLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
            gbc.fill = GridBagConstraints.HORIZONTAL;
            gbc.insets = new Insets(0, 0, 5, 0);
            gbc.gridx = 20 + k;
            gbc.gridwidth = 8;
            gbc.gridy = k + 1;
            add(firstLabel, gbc);
        }
        for (int k = 0; k < 5; k++) {
            firstText = new JTextField("Testing TextField");
            firstText.setFont(new Font("Serif", Font.BOLD, 20));
            firstText.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
            gbc.fill = GridBagConstraints.HORIZONTAL;
            gbc.insets = new Insets(0, 0, 5, 0);
            gbc.gridx = 29 + k;
            gbc.gridwidth = 21 - k;
            gbc.gridy = k + 1;
            add(firstText, gbc);
        }
    }
}
导入javax.swing.*; 公共类CopyTextNorthPanel扩展了JPanel{ 私有静态最终长serialVersionUID=1L; 私人JLabel hidelLabel; 私人JLabel firstLabel; 私有JTextField firstText; 公共CopyTextNorthPanel(){ setLayout(新的GridBagLayout()); GridBagConstraints gbc=新的GridBagConstraints(); setComponentOrientation(ComponentOrientation.从左到右); 对于(int k=0;k<50;k++){ hidelLabel=新的JLabel(“”); setboorder(BorderFactory.createLineBorder(Color.BLACK,1)); gbc.fill=GridBagConstraints.HORIZONTAL; gbc.weightx=0.5; gbc.weighty=0.5; gbc.gridx=k; gbc.gridy=0; 添加(希德拉贝尔,gbc); } 对于(int k=0;k<5;k++){ firstLabel=新的JLabel(“测试标签:”,SwingConstants.RIGHT); setFont(新字体(“衬线”,Font.BOLD,20)); firstLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK,1)); gbc.fill=GridBagConstraints.HORIZONTAL; gbc.插图=新插图(0,0,5,0); gbc.gridx=0; gbc.gridwidth=8; gbc.gridy=k+1; 添加(第一标签,gbc); } 对于(int k=0;k<5;k++){ firstText=新的JTextField(“测试文本字段”); setFont(新字体(“衬线”,Font.BOLD,20)); setboorder(BorderFactory.createLineBorder(Color.BLACK,1)); gbc.fill=GridBagConstraints.HORIZONTAL; gbc.插图=新插图(0,0,5,0); gbc.gridx=9; gbc.gridwidth=k+8; gbc.gridy=k+1; 添加(第一个文本,gbc); } 对于(int k=0;k<5;k++){ firstLabel=新的JLabel(“测试标签:”,SwingConstants.RIGHT); setFont(新字体(“衬线”,Font.BOLD,20)); firstLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK,1)); gbc.fill=GridBagConstraints.HORIZONTAL; gbc.插图=新插图(0,0,5,0); gbc.gridx=20+k; gbc.gridwidth=8; gbc.gridy=k+1; 添加(第一标签,gbc); } 对于(int k=0;k<5;k++){ firstText=新的JTextField(“测试文本字段”); setFont(新字体(“衬线”,Font.BOLD,20)); setboorder(BorderFactory.createLineBorder(Color.BLACK,1)); gbc.fill=GridBagConstraints.HORIZONTAL; gbc.插图=新插图(0,0,5,0); gbc.gridx=29+k; gbc.gridwidth=21-k; gbc.gridy=k+1; 添加(第一个文本,gbc); } } }
导入java.awt.*;
导入javax.swing.*;
公共类CopyTextNorthPanel扩展了JPanel{
私有静态最终长serialVersionUID=1L;
私人JLabel hidelLabel;
私人JLabel firstLabel;
私有JTextField firstText;
公共CopyTextNorthPanel(){
setLayout(新的GridBagLayout());
GridBagConstraints gbc=新的GridBagConstraints();
setComponentOrientation(ComponentOrientation.从左到右);
对于(int k=0;k<50;k++){
hidelLabel=新的JLabel(“”);
setboorder(BorderFactory.createLineBorder(Color.BLACK,1));
gbc.fill=GridBagConstraints.HORIZONTAL;
魏国斌
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class GridBagSSCCE extends JPanel
{
    JPanel red;
    JPanel green;

    public GridBagSSCCE()
    {
        setLayout( new GridBagLayout() );
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.VERTICAL;

        red = new JPanel();
        red.setBackground( Color.RED );
        red.setPreferredSize( new Dimension(300, 10) );
        gbc.weighty = 0.1;
        add(red, gbc);

        green = new JPanel();
        green.setBackground( Color.GREEN );
        green.setPreferredSize( new Dimension(300, 90) );
        gbc.gridy = 1;
        gbc.weighty = 0.9;
        add(green, gbc);

        JPanel buttons = new JPanel();
        buttons.add( new JButton("Ok") );
        buttons.add( new JButton("Cancel") );
        buttons.setAlignmentX(JPanel.RIGHT_ALIGNMENT);
        gbc.gridy = 2;
        gbc.weighty = 0.0;
        gbc.anchor = GridBagConstraints.LINE_END;
        add(buttons, gbc);

        addComponentListener( new ComponentAdapter()
        {
            public void componentResized(ComponentEvent e)
            {
                System.out.println(red.getSize() + " : " + green.getSize());
            }
        });
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("GridBagSSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new GridBagSSCCE() );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}
JTextArea textArea = new JTextArea(2, 40);
JScrollPane scrollPane = new JScrollPane( textArea );
frame.add(scrollPane, BorderLayout.CENTER);
frame.add(buttonPanel, BorderLayout.SOUTH);
frame.pack();