我在使用自定义JList
的{{1}}内创建了JScrollPane
。 ListCellRenderer
包含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
答案 0 :(得分:2)
一切都取决于......,然后JList
中的JScrollPane
可以为使用过的getPreferredSize
什么是getPreferredSize
返回ListCellRenderer
的价值,所有商品的PreferredSize
是否相同
是否使用了可见行的限制JList.setVisibleRowCount()
答案 1 :(得分:0)
认为问题是JScrollPane的视口,因为它比JScrollPane本身更大。如何调整视口宽度,使其始终与JScrollPane的宽度相同?
您需要在面板上实现Scrollable
界面,以将面板宽度限制为滚动窗格的宽度。
或者您可以使用Scrollable Panel,它提供了一些允许您控制此行为的方法。