当前位置: 首页 > 知识库问答 >
问题:

随着JDialog大小的变化,如何让JLabel始终停靠在GridBagLayout的左侧?

黄弘盛
2023-03-14

当JDialog窗口的大小改变时,JLabel和JTextField不会保持左对齐。是否可以让JLabel始终停靠在JDialog的左侧,同时让JTextFields增加宽度以覆盖右侧的其余水平空间。我认为网格包布局会对这种方法有所帮助,但到目前为止,我只能告诉它将每个组件放在网格b ad中的坐标。有什么建议或提示吗?

下面是我的代码,我从网上看到的另一个示例中创建了一个虚拟示例。

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;


public class GridBagLayoutExample extends JDialog {
    GridBagLayoutExample() {
        initUI();
    }

    private void initUI() {
        
        final JPanel controls = new JPanel(new GridBagLayout()); 
        GridBagConstraints c = new GridBagConstraints();
        c.insets = new Insets(10,10,0,10);
        
        
        JLabel firstNameLabel = new JLabel(); 
        firstNameLabel.setText("1st Name");   
        c.gridx = 0;
        c.gridy = 0; 
        controls.add(firstNameLabel,c);  
        
        
        
          
         JTextField firstNameField = new JTextField("Please input a 1st Name"); 
         c.gridx = 1; 
         c.gridy = 0; 
         controls.add(firstNameField, c); 
          
         
         
        JLabel secondNameField = new JLabel(); 
        secondNameField.setText("2nd Name");  
        c.gridx = 0;
        c.gridy = 1; 
        c.gridwidth = 1; 
        c.fill=GridBagConstraints.HORIZONTAL;
        controls.add(secondNameField, c);
        
        JTextField secondNameLabel = new JTextField("Please input a 2nd  Name"); 
        c.gridx = 1; 
        c.gridy = 1; 
        controls.add(secondNameLabel, c); 
         
        JLabel thirdNameLabel =  new JLabel();
        thirdNameLabel.setText("3rd Name");  
        c.gridx = 0;
        c.gridy = 2; 
        controls.add(thirdNameLabel, c);
        
        
        JTextField thirdNameField = new JTextField("Please input a 3rd Name"); 
        c.gridx = 1; 
        c.gridy = 2; 
        controls.add(thirdNameField, c); 
        

        
      
        controls.add(new JPanel(){
            {     
             }}); 
            setLayout(new BorderLayout());
            add(controls, BorderLayout.NORTH);
            pack();
        

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new GridBagLayoutExample().setVisible(true);
            }
        });
    }
}

共有1个答案

汪和悌
2023-03-14

看看GridbagConstraints#weightx

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class GridBagLayoutExample extends JDialog {

    GridBagLayoutExample() {
        initUI();
    }

    private void initUI() {

        final JPanel controls = new JPanel(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        c.insets = new Insets(10, 10, 0, 10);

        JLabel firstNameLabel = new JLabel();
        firstNameLabel.setText("1st Name");
        c.gridx = 0;
        c.gridy = 0;
        c.fill = GridBagConstraints.HORIZONTAL;
        controls.add(firstNameLabel, c);

        JTextField firstNameField = new JTextField("Please input a 1st Name");
        c.gridx = 1;
        c.gridy = 0;
        c.weightx = 1;
        controls.add(firstNameField, c);

        JLabel secondNameField = new JLabel();
        secondNameField.setText("2nd Name");
        c.weightx = 0;
        c.gridx = 0;
        c.gridy = 1;
        c.gridwidth = 1;
        controls.add(secondNameField, c);

        JTextField secondNameLabel = new JTextField("Please input a 2nd  Name");
        c.gridx = 1;
        c.gridy = 1;
        c.weightx = 1;
        controls.add(secondNameLabel, c);

        JLabel thirdNameLabel = new JLabel();
        thirdNameLabel.setText("3rd Name");
        c.weightx = 0;
        c.gridx = 0;
        c.gridy = 2;
        controls.add(thirdNameLabel, c);

        JTextField thirdNameField = new JTextField("Please input a 3rd Name");
        c.weightx = 1;
        c.gridx = 1;
        c.gridy = 2;
        controls.add(thirdNameField, c);

        controls.add(new JPanel() {
            {
            }
        });
        setLayout(new BorderLayout());
        add(controls, BorderLayout.NORTH);
        pack();

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new GridBagLayoutExample().setVisible(true);
            }
        });
    }
}

另请查看如何使用GridBagLayout以获取更多详细信息。

GridBagLayout非常强大,但这也使它非常复杂;)

 类似资料:
  • 我使用Infinispan缓存来存储值。代码每10分钟写入一次缓存,缓存大小约为400mb。它的生存时间约为2小时,最大条目数为1600万条,尽管目前在我的测试中,条目数没有超过200万条左右(我可以通过检查jconsole中的MBean/指标来了解这一点)。 当我启动jboss时,java堆大小是1.5Gb到2Gb。为jboss分配的最大内存的-Xmx设置是4Gb。 当我禁用Infinispan

  • 问题内容: 我正在制作一个具有以下布局()的Java Swing应用程序: 当用户添加或删除图标时,其他图标应缩小或增长。 我的问题很简单:我有一个包含;如何调整此图标的大小? 问题答案: 调整图标大小并不容易。您需要使用Java的2D图形来缩放图像。第一个参数是Image类,您可以从类中轻松获取。您可以使用class加载图像文件,然后只需调用getter方法即可获取图像。

  • 我知道如何以正常的方式改变JLabel的字体大小 但是我想看看当您将JLabel添加到面板时是否有一种方法,即简单的方法。像这样.. 当JLabel没有名称时,我如何更改后者的字体大小? 我尝试在JPanel上设置字体,但它不起作用。 对此,我们将不胜感激。

  • 我对JavaFX有问题。当我调整窗口大小时,它会自动调整锚具的大小以适应。此外,帆布的宽度和高度属性也被绑定到锚烷上。因此,如果通过重新调整窗口本身,锚烷变大,画布也会变大。 但是当我把窗户变小,宽度和高度保持不变时,问题就来了。我真的不明白那里的行为。 因此,如果在使窗户更大的宽度和高度是100。然后在把窗口缩小后,它仍然是100。。。除息的 这是我的画布控制器。 以及我对应的FXML:

  • 问题内容: 我正在尝试制作一个Java桌面应用程序,其中我要使用多个应用程序,我要设置的固定高度和宽度。我该如何实现? 这是我的代码 当我减少文本大小或文本 ,然后尺寸缩小但我想,当我减少或消除任何文字,但JLabel的大小不应该减少它应该修复 我怎么能得到这个? 提前致谢 问题答案: 您可以通过设置最小,首选和最大大小来设置固定大小: 当链接从 MadProgrammer ,你需要重写这些方法,

  • 我想在内部设置一个的。 我试着用 但这不起作用。我怎么能这么做?