gpt4 book ai didi

java - JScrollPane 中的 JComboBox

转载 作者:行者123 更新时间:2023-11-29 03:27:25 25 4
gpt4 key购买 nike

我有许多 JComboBoxes,我将它们添加到带有 BoxLayout 的面板中。所有工作正常大文本将被包裹在两三行中,这就是我使用 html 标签的原因。

我的问题是,当复选框太多时,我会添加一个 ScrollPane。 ScrollPane 应该只使用“VERTICAL_SCROLLBAR_​​AS_NEEDED”,但这会将格式从文本中断为只有一行。

编辑:
问题是,我如何在 Combobox 文本中使用换行符在 JScrollPane 中添加面板。对于滚动 Pane ,它不起作用。

这是一个简单的例子:

public static void main(String[] args) {
new MySwingTest();
}

private MySwingTest(){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createCenterPanel(), BorderLayout.CENTER);
frame.setSize(400, 400);
frame.setVisible(true);
}

private Component createCenterPanel() {

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
for(int i = 0 ; i < 10;i++){
panel.add(new JCheckBox("<html>das das das das das da d da fdfsdf dfsd fsdfsdf sdfsd fsdfsd fsdf fsd fss fs </html>"));
}
JScrollPane pane = new JScrollPane(panel,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
return pane;
}

最佳答案

如果我对您的理解正确的话,您真正想要的是一个永远不会比包含它的 JScrollPane 更宽的面板。 Swing 有一个接口(interface),Scrollable ,专门用于此目的:

class CheckboxPanel
extends JPanel
implements Scrollable {
private final int checkBoxHeight;

public CheckboxPanel() {
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
checkBoxHeight = new JCheckBox("Example").getPreferredSize().height;
}

@Override
public boolean getScrollableTracksViewportWidth() {
// This prevents a horizontal scrollbar from appearing.
return true;
}

@Override
public boolean getScrollableTracksViewportHeight() {
return false;
}

@Override
public Dimension getPreferredScrollableViewportSize() {
return getPreferredSize();
}

@Override
public int getScrollableUnitIncrement(Rectangle visibleRect,
int orientation,
int direction) {
if (orientation == SwingConstants.HORIZONTAL) {
return 1;
}

return Math.min(checkBoxHeight, direction < 0 ?
visibleRect.y : getHeight() - (visibleRect.y + visibleRect.height));
}

@Override
public int getScrollableBlockIncrement(Rectangle visibleRect,
int orientation,
int direction) {
if (orientation == SwingConstants.HORIZONTAL) {
return 10;
}

return Math.min(visibleRect.height, direction < 0 ?
visibleRect.y : getHeight() - (visibleRect.y + visibleRect.height));
}
}

关于java - JScrollPane 中的 JComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20312301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com