可以检测双击 JComboBox 项目吗?
Possible to detect double click on a JComboBox item?
我有一个问题想问学校,我应该在 "an item in the JComboBox
is double clicked" 时更改 JFrame
的背景颜色。
这可以使用 ItemListener
或 ActionListener
吗?或者我需要使用 MouseListener
?
来实现
代码:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
public class ColorSelection extends JFrame {
String[] colorNames = {
"Black", "Blue"
};
Color colors[] = {
Color.BLACK, Color.BLUE
};
JComboBox coloursComboBox = new JComboBox(colorNames);
ColorItemListener colorItemListener = new ColorItemListener(this);
public ColorSelection() {
super("My color combobox");
coloursComboBox.addItemListener(colorItemListener);
add(coloursComboBox, BorderLayout.NORTH);
setSize(600, 600);
setVisible(true);
}
public class ColorItemListener implements ItemListener {
ColorSelection colorSelection;
public ColorItemListener(ColorSelection colorSelection) {
this.colorSelection = colorSelection;
}
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
if (e.getItem().toString().equals("Black")) {
colorSelection.getContentPane().setBackground(Color.BLACK);
} else {
colorSelection.getContentPane().setBackground(Color.BLUE);
}
}
}
}
public static void main(String[] args) {
new ColorSelection();
}
}
不知道可不可以,因为鼠标单击后checkbox的弹窗就关闭了
但是,如果可能的话,我建议您需要将 MouseListener 添加到已添加到组合框弹出窗口中的 JList。
创建组合框后,您可以使用如下代码将 MouseListener 添加到 JList:
JComboBox comboBox = new JComboBox(...);
Object child = comboBox.getAccessibleContext().getAccessibleChild(0);
if (child instanceof BasicComboPopup)
{
BasicComboPopup popup = (BasicComboPopup)child;
JList list = popup.getList();
list.addMouseListener(...);
}
我有一个问题想问学校,我应该在 "an item in the JComboBox
is double clicked" 时更改 JFrame
的背景颜色。
这可以使用 ItemListener
或 ActionListener
吗?或者我需要使用 MouseListener
?
代码:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
public class ColorSelection extends JFrame {
String[] colorNames = {
"Black", "Blue"
};
Color colors[] = {
Color.BLACK, Color.BLUE
};
JComboBox coloursComboBox = new JComboBox(colorNames);
ColorItemListener colorItemListener = new ColorItemListener(this);
public ColorSelection() {
super("My color combobox");
coloursComboBox.addItemListener(colorItemListener);
add(coloursComboBox, BorderLayout.NORTH);
setSize(600, 600);
setVisible(true);
}
public class ColorItemListener implements ItemListener {
ColorSelection colorSelection;
public ColorItemListener(ColorSelection colorSelection) {
this.colorSelection = colorSelection;
}
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
if (e.getItem().toString().equals("Black")) {
colorSelection.getContentPane().setBackground(Color.BLACK);
} else {
colorSelection.getContentPane().setBackground(Color.BLUE);
}
}
}
}
public static void main(String[] args) {
new ColorSelection();
}
}
不知道可不可以,因为鼠标单击后checkbox的弹窗就关闭了
但是,如果可能的话,我建议您需要将 MouseListener 添加到已添加到组合框弹出窗口中的 JList。
创建组合框后,您可以使用如下代码将 MouseListener 添加到 JList:
JComboBox comboBox = new JComboBox(...);
Object child = comboBox.getAccessibleContext().getAccessibleChild(0);
if (child instanceof BasicComboPopup)
{
BasicComboPopup popup = (BasicComboPopup)child;
JList list = popup.getList();
list.addMouseListener(...);
}