【发布时间】: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