gpt4 book ai didi

java - 在 JComboBox 箭头 JButton 上附加操作事件

转载 作者:搜寻专家 更新时间:2023-11-01 02:54:08 25 4
gpt4 key购买 nike

我尝试在 JCombobox 箭头 JButton 上附加 Action 事件。

所以我制作了一个自定义 ComboBoxUI:

public class CustomBasicComboBoxUI extends BasicComboBoxUI {

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

@Override
protected JButton createArrowButton() {
JButton button=super.createArrowButton();
if(button!=null) {
button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
// arrow button clicked
}
});
}
return button;
}
}

这个问题是组合框的外观不同,看起来很旧。为什么?我只向同一个箭头按钮添加一个监听器...

谢谢。

最佳答案

也许问题是由于您期望 JComboBox 不是 BasicComboBoxUI,而是另一种外观,也许是 MetalComboBoxUI。

您能否从现有的 JComboBox 对象中提取 JButton 组件,而不是创建一个新的 CustomBasicComboBoxUI 对象?即,

import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class ComboBoxArrowListener {
private static void createAndShowUI() {
String[] data = {"One", "Two", "Three"};
JComboBox combo = new JComboBox(data);
JPanel panel = new JPanel();
panel.add(combo);

JButton arrowBtn = getButtonSubComponent(combo);
if (arrowBtn != null) {
arrowBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("arrow button pressed");
}
});
}

JFrame frame = new JFrame("ComboBoxArrowListener");
frame.getContentPane().add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

private static JButton getButtonSubComponent(Container container) {
if (container instanceof JButton) {
return (JButton) container;
} else {
Component[] components = container.getComponents();
for (Component component : components) {
if (component instanceof Container) {
return getButtonSubComponent((Container)component);
}
}
}
return null;
}

public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}

关于java - 在 JComboBox 箭头 JButton 上附加操作事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5057439/

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