【问题标题】:Java Restraining width for JPanel with GridBagLayout带有 GridBagLayout 的 JPanel 的 Java 限制宽度
【发布时间】:2017-09-18 00:21:11
【问题描述】:

我写了一个程序来生成 PDF 表格。为了更容易操作,我还创建了一个 GUI 来控制这些东西。但是,在 JFrame 上,这个 JComboBox 占用了大量空间,使右侧子面板变得不必要的宽,这让我很困扰。

原因可能是comboBox中有一个相当长的字符串

我尝试为面板使用“设置首选大小”,但没有成功。然后我继续使用 GridBagLayout 来尝试缩小该组合框。有没有办法将所有按钮和组合框限制在一定宽度?还是应该使用不同的布局?

最好该右侧面板中的所有组件都可以具有相同的宽度,就像它们现在一样。

谢谢!

这是我的代码:

JTable studentTable=new JTable(new StudentTableModel(bro));
            studentTable.setRowHeight(25);
            studentTable.setGridColor(java.awt.Color.BLACK);
            DefaultTableCellRenderer centerRenderer = new     
DefaultTableCellRenderer();
            centerRenderer.setHorizontalAlignment(SwingConstants.CENTER);

studentTable.getColumnModel().getColumn(2).setCellRenderer(centerRenderer);

studentTable.getColumnModel().getColumn(3).setCellRenderer(centerRenderer);

studentTable.getColumnModel().getColumn(5).setCellRenderer(centerRenderer);
        JPanel panelA1= new JPanel();
            panelA1.setOpaque(false);
            panelA1.setAlignmentX(Component.LEFT_ALIGNMENT);
            panelA1.setLayout(new GridBagLayout());

        JScrollPane scrollPaneA= new JScrollPane(studentTable);

        JButton buttonA1= new JButton("Activate All");

        JButton buttonA2= new JButton("Create Tables");

        JButton buttonA3= new JButton("Save File");

        JLabel labelA1= new JLabel("-Job Crews-");

        JButton buttonA4= new JButton("Deact Crew");

        JComboBox<Object> comboBoxA1=new JComboBox<Object>();
        comboBoxA1.addItem(new String("-N/A-"));
        for(JobCrew jj: crews)
        {
            comboBoxA1.addItem(jj);
        }
        comboBoxA1.setMaximumSize(new Dimension(100,100));

        GridBagConstraints c = new GridBagConstraints();
        {
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 0;
            panelA1.add(buttonA1,c);

            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 1;
            panelA1.add(buttonA2,c);

            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 2;
            panelA1.add(buttonA3,c);

            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 3;
            panelA1.add(labelA1,c);

            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 4;
            panelA1.add(comboBoxA1,c);

            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 5;
            panelA1.add(buttonA4,c);

        }

        JPanel panelA= new JPanel();
            panelA.setLayout(new BoxLayout(panelA,BoxLayout.X_AXIS));
            panelA.setOpaque(false);
            panelA.add(scrollPaneA); panelA.add(panelA1);
        //////
        /**********/
        tabs.addTab("Student info",null,panelA,"Organizes & displays student information");

【问题讨论】:

  • 组合框的大小(默认)等于最长元素的宽度,这使得组合框和相应的弹出窗口大小相同......为什么,我知道- 可能是这样,当您选择一个项目时,它不会被截断。如果您执行google search for "java jcombobox popup width",您会发现这不是一个不常见的问题 - 问题(我发现)是找到一个始终如一的解决方案
  • @MadProgrammer 谢谢你的建议。然而,虽然我明白你在说什么,但我希望弹出窗口的宽度可以大于组合框的宽度。我认为更改弹出窗口的宽度并没有真正的帮助?
  • 看看谷歌搜索的结果,他们专注于使组合框小于弹出窗口,这将始终是最长项目的大小......根据我的理解您的问题似乎是您要解决的问题 - 不过,我从未找到跨平台或 JVM 一致的解决方案
  • @MadProgrammer 我尝试了您和下面的回复者所说的,现在可以正常工作了!我刚刚使用了这个链接tips4java.wordpress.com/2010/11/28/combo-box-popup,它似乎是这个问题的通用解决方案。非常感谢!

标签: java swing combobox gridbaglayout


【解决方案1】:

查看Combo Box Popup

它将允许您控制组合框本身的宽度,并且弹出窗口可以是全宽。

或者您可以设置一个属性,以便在需要时在弹出窗口中显示滚动条。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-19
    • 2019-03-17
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多