Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 防止jLabel在单击嵌套jcombobox时失去焦点_Java_Swing_Focus_Jlabel_Jcombobox - Fatal编程技术网

Java 防止jLabel在单击嵌套jcombobox时失去焦点

Java 防止jLabel在单击嵌套jcombobox时失去焦点,java,swing,focus,jlabel,jcombobox,Java,Swing,Focus,Jlabel,Jcombobox,我正在制作一个应用程序,它将有一些带有文本(矩形名称)的“矩形”(myLabel)。每当我单击该矩形时,就会显示一个组合框(nameComboBox)来更改其名称 这就是这个类的声明 public class myLabel extends JLabel implements MouseListener,FocusListener{ //this.panel; JComboBox nameComboBox; String rectangleName; 我向该类添加了一些focus内容

我正在制作一个应用程序,它将有一些带有文本(矩形名称)的“矩形”(myLabel)。每当我单击该矩形时,就会显示一个组合框(nameComboBox)来更改其名称

这就是这个类的声明

public class myLabel extends JLabel implements MouseListener,FocusListener{

//this.panel;
JComboBox nameComboBox;
    String rectangleName;
我向该类添加了一些focus内容,您可以看到它实现了FocusListener

我只想在重角聚焦时显示组合框,否则将其隐藏。我的问题是,当我选择一个矩形时,它显示组合框,因为它是聚焦的,当我单击组合框时,矩形失去了焦点,所以它隐藏了组合框。有什么办法防止这种情况发生吗

编辑:

回复@mKorbel,这是我的SSCE

import java.awt.Color;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;


public class MyJLabel extends JLabel implements MouseListener,FocusListener{

JComboBox nameComboBox;
JPanel mainPanel;
String name;

public MyJLabel() {

    this.setLocation(10,10);

    this.setBounds(20, 20,200,200);

    this.setBackground(Color.LIGHT_GRAY);
    this.setFocusable(true);
    setOpaque(true);

    setHorizontalAlignment(SwingConstants.CENTER);
    setFont(getFont());
    setText(this.name);
    this.nameComboBox= new JComboBox(new String[] { "option1","option2","option3"  });
    this.nameComboBox.setBounds(40,40,100,50);
    this.nameComboBox.setVisible(false);
    this.addMouseListener(this);
    this.addFocusListener(this);
}
@Override
public void focusGained(FocusEvent e) {
    System.out.println("focus gained");
    this.nameComboBox.setVisible(true);
}
@Override
public void focusLost(FocusEvent e) {
    System.out.println("focus lost");
    this.nameComboBox.setVisible(false);

}
@Override
public void mouseClicked(MouseEvent e) {
    this.requestFocus();
}
@Override
public void mousePressed(MouseEvent e) {
    // TODO Auto-generated method stub

}
@Override
public void mouseReleased(MouseEvent e) {
    // TODO Auto-generated method stub

}
@Override
public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub

}
@Override
public void mouseExited(MouseEvent e) {
    // TODO Auto-generated method stub

}
public static void main(String[] args) {

    MyJLabel myjl=new MyJLabel();

    JFrame fr = new JFrame();
    fr.setLayout(null);

    fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JComboBox otherCombo = new JComboBox(new String[] {  "otherOption1","otherOption2","otherOption3"  });
    otherCombo.setBounds(40,400,100,50);



    fr.add(myjl.nameComboBox);
    fr.add(myjl);
    fr.add(otherCombo);

    fr.setSize(300,500);
    fr.setVisible(true);
}
}

您必须开始单击底部的组合,然后您将在控制台中看到焦点丢失。单击灰色矩形,将获得焦点。单击矩形内的组合框,矩形将立即失去并获得焦点,因此无法选择项目。当我与矩形的组合框交互时,我不想改变矩形的焦点。

您可以为组合框设置一个焦点侦听器?AFAIK
JLabel
不可聚焦
JComponent
,只有一个
JComponent
可以容纳
焦点,对大多数编程语言有效,为获得更好的帮助,请尽快发布您的问题,
short
runnable
compileable
,并且仅发布关于
JLabel
JComboBox
焦点回收