我正在构建一个充满标签的网格。其中一个包含html-text,应调整为最大格式并可滚动。我发现如何添加一个JScrollPane,但它保持一个行高,即使我给它一个400x400的大小,我也找不到如何调整它的大小......
删除getViewport()会得到相同的结果。
JPanel grid = new JPanel(new GridLayout(1,2));
// first cell of the grid
grid.add(new JLabel("title"));
// second cell of the grid, this should be the scrollable one
JScrollPane scroll = new JScrollPane();
scroll.getViewport().setSize(400, 400);
scroll.getViewport().add(new JLabel("<html>long<br>html<br>text</html>"));
grid.add(scrollVersion, BorderLayout.CENTER);
有什么想法吗?
非常感谢...
答案 0 :(得分:1)
GridLayout不尊重它所列出的组件的首选大小。它旨在使所有网格单元大小相同。另一种方法是使用GridBagLayout,但我个人会推荐ZoneLayout(在我看来)更简单,更强大,更直观。使用cheatsheet,你不会出错。
作为旁注,BorderLayout.CENTER是用于BorderLayout的约束,与GridLayout不兼容。将组件添加到GridLayout的所有者时,无需提供约束。使用GridLayout从左上角单元格开始从左到右添加组件。
答案 1 :(得分:0)
将您的GridLayout替换为GridBagLayout。使用正确的约束集,它应该像魅力一样工作。显然,看看some examples,因为GridBagLayout看起来相当复杂,但是有一些例子很简单。
答案 2 :(得分:0)
GridLayout的所有单元格都设计为具有相同的大小,因此如果你想要一个大于teh•你必须使用另一个LayoutManager,就像Riduel建议的GridBagLayout一样。
此外,如果您的JLabel将有多行,我建议您使用不可编辑的JTextPane替换它JTextArea