我的代码中有一个< code>JCombobox。我已经添加了< code>FocusLost事件。但它无论如何也没有被解雇。我已经尝试了很多次,但没有找到解决办法。
jcbItemType.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusLost(java.awt.event.FocusEvent evt) {
jcbItemTypeFocusLost(evt);
}
});
private void jcbItemTypeFocusLost(java.awt.event.FocusEvent evt)
{
// TODO add your handling code here:
System.out.println("name=" + ((Component) evt.getSource()).getName());
System.out.println("index=" + jcbItemType.getSelectedIndex());
}
但控制台中没有打印任何内容。请告诉我我做错了什么。
> < li>
FocusListener不是JComboBox的合适侦听器,与其他侦听器一起可能会创建无限循环(尤其是可编辑的JComboBox),
FocusListener是异步的,有时很难捕捉正确顺序的事件,尤其是在JComponents也添加了另一个侦听器的情况下
示例如何从派生JTextField/JFormattedTextField
侦听Focus
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ComboBoxTwo extends JFrame implements ItemListener {
private static final long serialVersionUID = 1L;
private JComboBox mainComboBox;
private JComboBox subComboBox;
public ComboBoxTwo() {
String[] items = {"Select Item", "Color", "Shape", "Fruit"};
String[] subItems1 = {"Select Color", "Red", "Blue", "Green"};
mainComboBox = new JComboBox(items);
mainComboBox.addItemListener(this);
mainComboBox.addFocusListener(fcsListener);
add(mainComboBox, BorderLayout.WEST);
subComboBox = new JComboBox(subItems1);
subComboBox.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXX");
subComboBox.addItemListener(this);
add(subComboBox, BorderLayout.EAST);
}
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
if (e.getSource() == mainComboBox) {
System.out.println("Source : mainComboBox");
} else if (e.getSource() == subComboBox) {
System.out.println("Source : subComboBox");
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new ComboBoxTwo();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
//
private FocusListener fcsListener = new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
dumpInfo(e);
}
@Override
public void focusLost(FocusEvent e) {
dumpInfo(e);
}
private void dumpInfo(FocusEvent e) {
System.out.println("Source : " + name(e.getComponent()));
System.out.println("Opposite : " + name(e.getOppositeComponent()));
System.out.println("Temporary: " + e.isTemporary());
final Component c = e.getComponent();//works for editable JComboBox too
if (c instanceof JFormattedTextField) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
((JFormattedTextField) c).selectAll();
}
});
} else if (c instanceof JTextField) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
((JTextField) c).selectAll();
}
});
}
}
private String name(Component c) {
return (c == null) ? null : c.getName();
}
};
}
我找到了一个非常简单的方法来解决这个问题。
JComboBox默认编辑器有一个内部类BasicComboBoxEditor$Borderless TextField,它是获取和丢失焦点的组件。
它可以通过简单的方式访问
Component component = comboBox.getEditor().getEditorComponent();
if (component instanceof JTextField)
JTextField borderlesstextfield = (JTextField) borderless;
然后像向任何 JTextField 一样添加焦点侦听器
borderlesstextfield.addFocusListener(new FocusListener()
{
public void focusGained(FocusEvent e)
{
}
public void focusLost(FocusEvent e)
{
}
}});
现在,您有了一个FocusListener,它将按预期响应组合框的焦点获得和丢失
ChatGPT为什么这么火?
我正在尝试在我的组合框上绑定一个失焦事件,但它没有发生。 这是我的密码-: 我还试着这样做: JComboBox默认编辑器有一个内部类BasicComboBoxEditor$Borderless TextField,它是获取和丢失焦点的组件。 它可以通过以下方式访问: 但我在这条线上遇到了错误- 我是网豆新手,请提前指导me.Thank。
问题内容: 我的代码中有一个。我已添加。但是它还是没有被触发。我已经尝试了很多时间,但是没有找到解决方案。 但是控制台中没有任何内容。请建议我我在做什么错。 问题答案: FocusListener不是JComboBox的适当监听器,另外一个监听器可以创建无限循环(尤其是可编辑的JComboBox), 的FocusListener是异步的,有时是太难捕捉事件是正确的订单特别是在案件JComponen
本文向大家介绍为什么Node.js会这么火呢?Node.js流行的原因,包括了为什么Node.js会这么火呢?Node.js流行的原因的使用技巧和注意事项,需要的朋友参考一下 Node.js是一项服务器技术,它用来构建和运行Web应用,这和ASP.NET,Ruby on Rails或Spring框架做的工作是类似 的。它使用JavaScript作为主要的开发语言,有一个自带的轻量级Web服务器,还
这是一个取自现有代码库的cucumber场景大纲,但我被要求使用TestNG尝试它。一些东西(场景(),场景(),TestNGCucumberRunner,数据提供商)已经从stackoverflow上的另一个帖子中删除,因为我不知道如何使用TestNG使场景大纲发挥良好。 在执行时,唯一的错误是NullPointerException,因为WebDriver获取其值时@BeforeClass未触
问题内容: Java 7中的JCombobox已更新为使用泛型-我一直认为它还没有做到,这有点疏忽,所以我很高兴看到这一更改。 但是,当尝试以这种方式使用JCombobox时,我意识到我期望使用这些泛型类型的方法仍然会返回 这到底是为什么呢?对我来说,这似乎是一个愚蠢的设计决定。我意识到底层的ListModel有一个通用方法,因此我将改用它- 但这似乎是可以在JComboBox本身上更改的某种回旋