限制包含JList的JScrollpane的宽度

时间:2014-04-30 08:22:49

标签: java swing jlist listcellrenderer

我在使用自定义JList的{​​{1}}内创建了JScrollPaneListCellRenderer包含ListCellRenderer,其内容包含HTML,因此文本会自动换行。不使用Jlabel包装工作,但当我使用JScrollPane时,文本没有被包装,并且出现水平滚动条。

JScrollPane的摘录:

ListCellRenderer

将我的列表添加到public class WorkableCellRenderer implements ListCellRenderer<Workable> { @Override public final Component getListCellRendererComponent(final JList<? extends Workable> list, final Workable value, final int index, final boolean isSelected, final boolean isFocused) { JPanel cell = new JPanel(); cell.setLayout(new BoxLayout(cell, BoxLayout.Y_AXIS)); // ... JPanel pnlDescription = new JPanel(); cell.add(pnlDescription); pnlDescription.setLayout(new BorderLayout()); JLabel lblDescription = new JLabel("<html><p style=\"margin: 0; padding: 0;\">" + value.getDescription() + "</p></html>"); lblDescription.setFont(lblDescription.getFont().deriveFont(Font.PLAIN)); pnlDescription.add(lblDescription, BorderLayout.CENTER); // ... return cell; } }

的方法
JFrame

我认为问题是private void addLoadedModulesPanel() { pnlLoadedModulesWrapper = new JPanel(); pnlBottom.add(pnlLoadedModulesWrapper, BorderLayout.CENTER); pnlLoadedModulesWrapper.setLayout(new MigLayout("insets 0 5 5 5", "[grow]", "[grow]")); pnlLoadedModulesBox = new JPanel(); pnlLoadedModulesWrapper.add(pnlLoadedModulesBox, "cell 0 0,grow"); pnlLoadedModulesBox.setLayout(new MigLayout("insets 3", "[grow]", "[grow]")); pnlLoadedModulesBox.setBorder(BorderFactory.createTitledBorder("Geladene Module")); lstLoadedModules = new JList<Workable>(DefaultWorkableManager.getInstance()); lstLoadedModules.setCellRenderer(new WorkableCellRenderer()); final JScrollPane listScroller = new JScrollPane(lstLoadedModules); pnlLoadedModulesBox.add(listScroller, "cell 0 0,grow"); } 的视口,因为它大于JScrollPane本身。如何调整视口宽度,使其始终与JScrollPane的宽度相同?

这是一个显示我的问题的MCVE:

JScrollPane

2 个答案:

答案 0 :(得分:2)

一切都取决于......,然后JList中的JScrollPane可以为使用过的getPreferredSize LayoutManager(或直接使用JList.setPrototypeCellValue) >

  1. 什么是getPreferredSize返回ListCellRenderer的价值,所有商品的PreferredSize是否相同

  2. 如何设置JList.setLayoutOrientation()

  3. 是否使用了可见行的限制JList.setVisibleRowCount()

答案 1 :(得分:0)

  

认为问题是JScrollPane的视口,因为它比JScrollPane本身更大。如何调整视口宽度,使其始终与JScrollPane的宽度相同?

您需要在面板上实现Scrollable界面,以将面板宽度限制为滚动窗格的宽度。

或者您可以使用Scrollable Panel,它提供了一些允许您控制此行为的方法。