0

テキスト(rectangleName)を含むいくつかの'rectangles'(myLabel)を持つアプリを作成しています。その長方形をクリックするたびに、コンボボックス(nameComboBox)が表示されて名前が変更されます。

つまり、これはそのクラスの宣言です。

public class myLabel extends JLabel implements MouseListener,FocusListener{

//this.panel;
JComboBox nameComboBox;
    String rectangleName;

ご覧のとおり、FocusListenerを実装しているので、そのクラスにいくつかのフォーカスを追加しました。

リアングルがフォーカスされている場合にのみコンボボックスを表示し、それ以外の場合は非表示にします。私が抱えている問題は、長方形を選択すると、フォーカスされているためにコンボボックスが表示されることです。コンボボックスをクリックすると、長方形のフォーカスが失われ、コンボボックスが非表示になります。これを防ぐ方法はありますか?

編集:

@mKorbelに返信します、これは私のSSCCEです

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);
}
}

下部にあるコンボをクリックし始める必要があります。コンソールにフォーカスが失われていることがわかります。灰色の長方形をクリックすると、フォーカスが得られます。長方形の内側のコンボをクリックすると、長方形はすぐにフォーカスを失い、フォーカスを取得するため、アイテムを選択することはできません。コンボボックスを操作している間は、長方形のフォーカスを変更したくありません。

4

0 に答える 0