Events JComboBox焦点和鼠标单击事件不起作用
编辑Events JComboBox焦点和鼠标单击事件不起作用,events,swing,jcombobox,Events,Swing,Jcombobox,编辑 唐纳,这个问题怎么不好?我提供了该问题的可运行示例代码。如果它对你有效,请让我知道或指出什么是不清楚的 你好, 在下面的代码中,在JFrame中有一个JComboBox,当鼠标进入JComboBox或被单击或获得焦点时,我没有收到通知。但是,弹出菜单事件工作正常 我做错了什么?(我的目标是在单击JComboBox的文本组件时发出警报) 公共类testjcombox扩展了javax.swing.JFrame { 公共测试jcombox() { 初始化组件(); } // 私有组件(){ j
唐纳,这个问题怎么不好?我提供了该问题的可运行示例代码。如果它对你有效,请让我知道或指出什么是不清楚的 你好,
在下面的代码中,在
JFrame
中有一个JComboBox
,当鼠标进入JComboBox
或被单击或获得焦点时,我没有收到通知。但是,弹出菜单事件
工作正常
我做错了什么?(我的目标是在单击JComboBox的文本组件时发出警报)
公共类testjcombox扩展了javax.swing.JFrame
{
公共测试jcombox()
{
初始化组件();
}
//
私有组件(){
jcombox1=newjavax.swing.JComboBox();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addMouseListener(新java.awt.event.MouseAdapter(){
public void mouseClicked(java.awt.event.MouseEvent evt){
formMouseClicked(evt);
}
});
jcombox1.setEditable(true);
setModel(新的javax.swing.DefaultComboxModel(新字符串[]{“Item 1”、“Item 2”、“Item 3”、“Item 4”});
jComboBox1.setName(“jComboBox1”);//NOI18N
jcombox1.addMouseListener(新java.awt.event.MouseAdapter(){
public void mouseClicked(java.awt.event.MouseEvent evt){
JCombox1MooseClicked(evt);
}
public void mouseenterned(java.awt.event.MouseEvent evt){
JCombox1MooseEntered(evt);
}
});
jcombox1.addPopupMenuListener(新的javax.swing.event.PopupMenuListener(){
public void popupMenuCanceled(javax.swing.event.PopupMenuEvent evt){
}
public void popupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt){
}
public void popupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt){
JCombox1PopupMenus将变得可见(evt);
}
});
jcombox1.addFocusListener(新java.awt.event.FocusAdapter(){
public void focusgoven(java.awt.event.FocusEvent evt){
JCombox1focusged(evt);
}
});
javax.swing.GroupLayout=newjavax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(布局);
layout.setHorizontalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(70,70,70)
.addComponent(jcombox1,javax.swing.GroupLayout.PREFERRED_SIZE,226,javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(104,简称最大值))
);
layout.setVerticalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(90,90,90)
.addComponent(jcombox1,javax.swing.GroupLayout.PREFERRED_SIZE,46,javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(164,简称最大值))
);
包装();
}//
私有无效JCombox1FocusGuided(java.awt.event.FocusEvent evt)
{
System.out.println(“获得JComboBox焦点”);
}
私有void formMouseClicked(java.awt.event.MouseEvent evt)
{
System.out.println(“点击表单”);
jCombox1.setFocusable(假);
jCombox1.setFocusable(真);
}
私有void JCombox1MouseClicked(java.awt.event.MouseEvent evt)
{
System.out.println(“JComboBox单击”);
}
私有void JCombox1popupMenu将变得可见(javax.swing.event.PopupMenuEvent evt)
{
System.out.println(“JComboBox可见菜单”);
}
私有void jcombox1mouseintered(java.awt.event.MouseEvent evt)
{
System.out.println(“输入JComboBox”);
}
公共静态void main(字符串参数[])
{
invokeLater(new Runnable())
{
公开募捐
{
新建TestJComboBox().setVisible(true);
}
});
}
//变量声明-不修改
私有javax.swing.JComboBox jcombox1;
//变量结束声明
}
谢谢 可能是选民对您使用Netbeans GUI编辑器感到不满。我自己也不喜欢它,但是如果您发现可以用它维护一个复杂的gui,欢迎您使用它。我个人讨厌它,因为各种非常讨厌的bug只在你试图编辑表单时才会出现,它会悄悄地丢失你的布局和组件设置。但这不是重点 无论如何,您需要像这样添加ActionListener:
jComboBox1.getEditor().getEditorComponent().addMouseListener(...);
JComboBox实际上是一个复合组件,其中包含JTextField、JButton和JList,因此您将ActionListener添加到包装组件中,而鼠标事件实际上将进入内部JTextField。不要忘记comboBox实际上是一个容器。因此,如果您真的想拥有所有鼠标事件,您应该将侦听器添加到它包含的所有组件中 public void addMouseListener(final MouseListener mouseListener) { this.comboBox.addMouseListener(mouseListener); final Component[] components = this.comboBox.getComponents(); for(final Component component : components) { component.addMouseListener(mouseListener); } this.comboBox.getEditor().getEditorComponent().addMouseListener(mouseListener); } 公共无效添加MouseStener(最终MouseStener MouseStener){ this.comboBox.addMouseStener(mouseStener); 最终组件[]组件=this.comboBox.getComponents(); 用于(最终组件:组件){ 组件。添加MouseStener(MouseStener); } this.comboBox.getEditor().getEditorComponent().addMouseStener(mouseStener); } 有关更多详细信息,请访问。“我的目标是在单击JComboBox的文本组件时收到警报” 这可以通过将FocusListener添加到JComboBox的底层JTextField组件来实现,该组件将按预期响应ComboBox的焦点获得和丢失
Component component = comboBox.getEditor().getEditorComponent();
if (component instanceof JTextField){
JTextField txtFiled = (JTextField) borderless;
txtFiled.addFocusListener(new FocusListener()
{
public void focusGained(FocusEvent e)
{
//To Do Focus Gained
}
public void focusLost(FocusEvent e)
{
//To Do Focus Lost
}
});
}
W
Component component = comboBox.getEditor().getEditorComponent();
if (component instanceof JTextField){
JTextField txtFiled = (JTextField) borderless;
txtFiled.addFocusListener(new FocusListener()
{
public void focusGained(FocusEvent e)
{
//To Do Focus Gained
}
public void focusLost(FocusEvent e)
{
//To Do Focus Lost
}
});
}