gpt4 book ai didi

java - 为 JComboBox 提供水平滚动条的可移植方法

转载 作者:行者123 更新时间:2023-12-01 05:53:03 25 4
gpt4 key购买 nike

来自CoderanchSun Forum ,我知道 JComboBox 具有水平滚动条的技术。

但是,他们建议的解决方案仅限于特定的“外观和感觉”。

正如您所看到的,如果用户在使用 GTK+ 外观的 Linux 机器或使用 Nimbus 外观的 Windows 机器下,下面的关键代码片段将无法正常工作。

我如何才能有一种便携的方式,使 JComboBox 能够有一个水平滚动条?

完整源代码为AutoCompleteJComboBox.java

关键代码片段如下:

package org.yccheok.jstock.gui;

public class AutoCompleteJComboBox extends JComboBox {

@Override
public void setUI(ComboBoxUI ui)
{
if (ui != null)
{
// Let's try our own customized UI.
Class c = ui.getClass();
final String myClass = "org.yccheok.jstock.gui.AutoCompleteJComboBox$My" + c.getSimpleName();

try {
ComboBoxUI myUI = (ComboBoxUI) Class.forName(myClass).newInstance();
super.setUI(myUI);
return;
} catch (ClassNotFoundException ex) {
log.error(null, ex);
} catch (InstantiationException ex) {
log.error(null, ex);
} catch (IllegalAccessException ex) {
log.error(null, ex);
}
}

// Either null, or we fail to use our own customized UI.
// Fall back to default.
super.setUI(ui);
}

// This is a non-portable method to make combo box horizontal scroll bar.
// Whenever there is a new look-n-feel, we need to manually provide the ComboBoxUI.
// Any idea on how to make this portable?
//
protected static class MyWindowsComboBoxUI extends com.sun.java.swing.plaf.windows.WindowsComboBoxUI
{
@Override
protected ComboPopup createPopup()
{
return new MyComboPopup(comboBox);
}
}

protected static class MyMotifComboBoxUI extends com.sun.java.swing.plaf.motif.MotifComboBoxUI
{
@Override
protected ComboPopup createPopup()
{
return new MyComboPopup(comboBox);
}
}

protected static class MyMetalComboBoxUI extends javax.swing.plaf.metal.MetalComboBoxUI
{
@Override
protected ComboPopup createPopup()
{
return new MyComboPopup(comboBox);
}
}

private static class MyComboPopup extends BasicComboPopup
{
public MyComboPopup(JComboBox combo)
{
super(combo);
}

@Override
public JScrollPane createScroller()
{
return new JScrollPane(list,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
}
}
}

最佳答案

我通过以下论坛解决了我的问题 Oracle Java Swing Forum

关于java - 为 JComboBox 提供水平滚动条的可移植方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3980240/

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