gpt4 book ai didi

java - 将 PropertyChangeListener 添加到 JComboBox

转载 作者:行者123 更新时间:2023-12-02 00:14:22 30 4
gpt4 key购买 nike

如何使用PropertyChangeListenerJComboBox ?当我写可编辑JComboBox时,我立即得到了文字,因为我更改了组合框箭头按钮的图标;关键的听众不再工作了。这是我尝试过的,但我不知道如何完成:

editor = (JTextComponent) jComboBox1.getEditor().getEditorComponent();

editor.addPropertyChangeListener(new PropertyChangeListener()
{
@Override
public void propertyChange(PropertyChangeEvent evt)
{

}

});

最佳答案

理解您想要从帖子中实现的目标有点困难,但如果您有兴趣知道编辑器内容何时更改,您可以尝试

final JComboBox combo = new JComboBox();
combo.setEditable(true);
((JTextComponent) combo.getEditor().getEditorComponent()).getDocument().addDocumentListener(new DocumentListener() {
protected void updatePopup() {

if (combo.isDisplayable()) {

if (!combo.isPopupVisible()) {

combo.showPopup();

}

}

}

@Override
public void insertUpdate(DocumentEvent e) {
updatePopup();
}

@Override
public void removeUpdate(DocumentEvent e) {
updatePopup();
}

@Override
public void changedUpdate(DocumentEvent e) {
updatePopup();
}
});

通常,我会创建一个“DocumentHandler”作为具体类并使用它,但该示例演示了基本思想

更新了 UI 示例

public class TestComboBox extends JFrame {

public TestComboBox() {

setTitle("Test");
setSize(200, 200);
setLayout(new GridBagLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);

final JComboBox combo = new JComboBox();

/**** You have to do this first
**** Doing this invalidates any previous listeners
****/
combo.setUI(ColorArrowUI.createUI(combo));

combo.setEditable(true);
((JTextComponent) combo.getEditor().getEditorComponent()).getDocument().addDocumentListener(new DocumentListener() {
protected void updatePopup() {

if (combo.isDisplayable()) {

if (!combo.isPopupVisible()) {

combo.showPopup();

}

}

}

@Override
public void insertUpdate(DocumentEvent e) {
updatePopup();
}

@Override
public void removeUpdate(DocumentEvent e) {
updatePopup();
}

@Override
public void changedUpdate(DocumentEvent e) {
updatePopup();
}
});

combo.setModel(createComboBoxModel());

add(combo);

setVisible(true);

}

protected ComboBoxModel createComboBoxModel() {

DefaultComboBoxModel model = new DefaultComboBoxModel();

File file = new File("../TestWords/Words.txt");
BufferedReader reader = null;

try {

reader = new BufferedReader(new FileReader(file));
String text = null;
while ((text = reader.readLine()) != null) {

model.addElement(text);

}

} catch (Exception e) {
} finally {

try {
reader.close();
} catch (Exception e) {
}

}

return model;

}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
}
new TestComboBox();
}

public static class ColorArrowUI extends BasicComboBoxUI {

public static ComboBoxUI createUI(JComponent c) {
return new ColorArrowUI();
}

@Override
protected JButton createArrowButton() {
return new BasicArrowButton(
BasicArrowButton.SOUTH,
Color.cyan, Color.magenta,
Color.yellow, Color.blue);
}
}
}

使用 UI 设置

Set by UI

使用画家设置

Set By Painter

已更新

这是 kleopatra 向您展示的代码

Painter painter = new Painter<JComponent>() {

@Override
public void paint(Graphics2D g, JComponent object, int width, int height) {

g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);

}

};

JButton org = null;
for (int i = 0; i < combo.getComponentCount(); i++) {
if (combo.getComponent(i) instanceof JButton) {
org = (JButton) combo.getComponent(i);
UIDefaults buttonDefaults = new UIDefaults();
buttonDefaults.put("ComboBox:\"ComboBox.arrowButton\"[Enabled].foregroundPainter", painter);
org.putClientProperty("Nimbus.Overrides.InheritDefaults", false);
org.putClientProperty("Nimbus.Overrides", buttonDefaults);
break;
}
}

关于java - 将 PropertyChangeListener 添加到 JComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12118060/

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