【发布时间】:2013-11-28 12:51:30
【问题描述】:
我的JFrame 看起来像这样:
当它调整大小时,它会使JComboBoxes适应JFrame的大小,如下所示:
这就是我想要的。但是当我添加JScrollPane 时,JComboBoxes 不再适应:
任何想法如何使 JComboBoxes 仍然用添加的JScrollPane 填充水平?(使JScrollPane 只影响垂直滚动)
public class FillHorizonScrollVertical extends JFrame {
private boolean withScroller = true;
private JPanel content;
public FillHorizonScrollVertical() {
// FILL = BOTH for JFrame
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.weightx = 1;
c.weighty = 1;
this.setLayout(new GridBagLayout());
// GridLayout = All content gets the same size
content = new JPanel(new GridLayout());
// ADD TO THE FRAME
JScrollPane scroller = new JScrollPane(content);
if (withScroller)
this.add(scroller, c);
else
this.add(content, c);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
// ADDING THE BOXES AFTER SETTING VISIBLE
addBoxes();
this.pack();
}
/**
* Create JComboBoxes and adding them to the JPanel
*/
private void addBoxes() {
// CREATE JCOMBOBOXES
JComboBox cb1 = new JComboBox();
cb1.addItem("");
cb1.addItem("aaaaaaaaaaaaaaaaaa");
JComboBox cb2 = new JComboBox();
cb2.addItem("");
JComboBox cb3 = new JComboBox();
cb3.addItem("");
content.add(cb1);
content.add(cb2);
content.add(cb3);
}
public static void main(String[] args) {
new FillHorizonScrollVertical();
}
}
【问题讨论】:
-
WRF 你的问题我认为你不能这样做。如果存在垂直滚动条,它将垂直滚动。
-
如果是这样:JScrollPane 扩展了 JComponent。难道不能以某种方式@override setHorizontalScrollBar() 吗?..
-
不添加 JComboBoxes(addBoxes()),而是替换为:JTextArea area = new JTextArea(); area.setPreferredSize(新维度(200, 200));内容。添加(区域);。这将使 JFrame 填充水平并垂直滚动。但不要设法用 JComboBoxes 做同样的事情。
-
您的用例完全模棱两可。如果您希望组合框适应调整大小的窗口,使用
JScrollPane有什么意义? -
如问题中所述,我希望 JScrollPane 仅滚动垂直而不滚动水平。即:填充水平而不是垂直。
标签: java swing layout jscrollpane gridbaglayout