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

GridBagLayout组件是否忽略宽度?

刘胜泫
2023-03-14

抱歉,如果以前有人问过这个问题,但我花了很长时间搜索都没有成功。

我有一个面板,我试图使用GridBagLayout添加一些组件。

问题是,出于某种原因,我无法理解-我试图添加的JTextArea似乎忽略了分配给它的宽度-它似乎接受高度没有问题。

除了文本区域之外,所有组件都添加得很好——文本区域的宽度应该为3,但显示宽度为1。

我不明白为什么会这样,有人能帮忙吗?

提前感谢您的帮助。

代码:(编辑)

public class Main {


public static void main(String[] args) {

    Content master = new Content();
    master.createAndShowGui();
}

}
package test;

//import declarations

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

public class Content

{   
//declare class variables

private JDialog schoolFrame = new JDialog();
private JPanel schoolPanel = new JPanel(new GridBagLayout());
private JTextArea text = new JTextArea();
private JButton exit = new JButton("Quit");
private JButton portView = new JButton("View Portfolio");
private JButton payView = new JButton("View Payment Info");
private GridBagConstraints c = new GridBagConstraints();
private JLabel payAmount = new JLabel("",SwingConstants.CENTER);
private JButton subPayment = new JButton("Submit Payment");
private JLabel subLabels[] = new JLabel[5];
private JTextField subFields[] = new JTextField[5];
private JButton subGradeChange = new JButton("Submit Changes");
JLabel tester = new JLabel();
JLabel tester2 = new JLabel("jjjjjjj");


public Content(){

}

private void setOptions(JComponent b,int weightx,int weighty,int x,int y,int width,int height)
{
    c.fill = GridBagConstraints.BOTH;    
    c.weightx = weightx;
    c.weighty = weighty;
    c.gridy = y;
    c.gridx = x;
    c.gridwidth = width;
    c.gridheight = height;
    schoolPanel.add(b, c);
}

//method to create and display the GUI

public JDialog createAndShowGui()
{   
    c.fill = GridBagConstraints.BOTH;
    c.insets = new Insets(0,0,0,0);
    schoolFrame.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    schoolFrame.setContentPane(schoolPanel);
    schoolFrame.setMinimumSize(new Dimension(600,600)); 
    schoolFrame.setMaximumSize(new Dimension(600,600));
    text.setEditable(false);
    schoolFrame.setModal(true);
    schoolFrame.setTitle("Simple School System: House Head");
    setOptions(tester, 1, 1, 2, 0, 1, 1);
    setOptions(portView,1,1,0,0,2,1);
    setOptions(text,1,1,2,0,3,7);
    for(int i=0;i<subLabels.length;i++){
        subLabels[i] = new JLabel();
        subFields[i] = new JTextField();
        subLabels[i].setText("Subject: ");
        subFields[i].setText("Enter Grade");
        setOptions(subLabels[i],1,1,0,i+1,1,1);
        setOptions(subFields[i],1,1,1,i+1,1,1);
    }
    setOptions(subGradeChange,1,1,1,6,1,1);
    setOptions(exit,1,1,0,6,1,1);
    exit.addActionListener
  (
    new ActionListener()
    {
        @Override

    public void actionPerformed(ActionEvent e)
    {
            int quit = JOptionPane.showConfirmDialog(null,"Exit","Are you sure",JOptionPane.YES_NO_OPTION);
            if(quit==0)
            {
                System.exit(0);
            }
            else
            {
                schoolFrame.dispose();
                hideUpdate();
            }
    }
  });

    //pack components before displaying frame

    schoolFrame.pack();
    text.setPreferredSize(text.getPreferredSize());
    schoolFrame.pack();
    schoolFrame.setLocationRelativeTo(null);
    schoolFrame.setVisible(true);
    return schoolFrame;
}



//method to update the contents of the frame

private void hideUpdate()
{
    schoolFrame.setVisible(false);      
    schoolFrame.pack();
    schoolFrame.repaint();
    schoolFrame.pack();
    schoolFrame.setVisible(true);       
}
}

共有1个答案

陈兴朝
2023-03-14

要计算3列的宽度,第2列和第3列中应该有一些内容。

所以事实上,您将所有组件添加到一列中。LayoutManager无法计算列2和3的宽度,因为列中没有组件。因此,它们的宽度为0,文本区域的宽度=第1列宽度0 0

 类似资料:
  • 本文向大家介绍Git 检查文件是否被忽略,包括了Git 检查文件是否被忽略的使用技巧和注意事项,需要的朋友参考一下 示例 该git check-ignore命令报告Git忽略的文件。 您可以在命令行上传递文件名,git check-ignore并将列出被忽略的文件名。例如: 在此,.gitignore中仅定义了* .o文件,因此Readme.md未在.git的输出中列出git check-igno

  • 我已经添加了JVM start参数: 但在原木里我看到了

  • 我一直在使用cat合并一堆csv文件,然后使用排序删除复制文件,然后导入到MySQL。与处理大量csv文件一样肮脏的工作可能是一帆风顺的,直到我发现我的一些数据没有进入数据库。 我发现在合并文件的过程中,在某些情况下,列名(csv文件的第一行)被抛到了其他列中。结果是,当我使用排序删除重复并吐出一个新文件时,它只输出到csv文件中列名被抛入新未使用列的行。 我使用猫如下: 并排序为 然后我让我的方

  • 我的库需要连接到任意的AWS-IoT帐户,因此我在实例化AWS客户端时传递所需的凭据: 根据boto3文档(摘录如下),以这种方式传递的凭据应该覆盖所有其他凭据。然而,此调用从Boto3生成以下日志消息: 我真的不希望boto3拾取用户可能在他们的系统上配置的任何凭据——我希望它只使用我传递给boto3.client()的凭据。有什么想法如何确保这一点? 两份文件摘录:

  • 我在父pom的imported dependencyManagement部分中指定了库的版本。我确认我的有效pom只有一次出现这种依赖性。它位于dependencyManagement部分: 这将根据它覆盖可传递依赖项的版本。安装(并重新安装依赖项以匹配版本边界)后,组织。阿帕奇。专家插件:maven依赖插件:2.8:树打印: 但是(最初,没有重新安装依赖项)enforcer抱怨版本错误: 并显示

  • 问题内容: 我有一个由命令(使用任务)生成的文件。我不想将其添加到git存储库中,也不想添加到NPM项目中。 假设文件名是,我将其添加到文件中。 这足以避免将其上传到NPM注册表中吗? 我知道我可以添加肯定会忽略该文件的文件,但是如果已经这样做,则不会添加它。 问题答案: 如果项目同时具有和文件,则npm将 仅 使用该文件。 从文档中: 使用文件将东西从包装中取出。如果没有文件,但有 是 一个文件