मुझे एक संलग्न ड्रॉपडाउन शैली मेनू के साथ एक जेबटन की आवश्यकता थी। इसलिए मैंने एक जेपीओपमेनू लिया और इसे नीचे दिए गए कोड में जिस तरह से देख सकते हैं उसमें जेबटन से जुड़ा हुआ है।जेबटन से जेपीओपअपमेनू दिखा रहा/छुपा रहा है; फोकस लिस्टनर काम नहीं कर रहा है?
- जब क्लिक
- छिपाने यह पॉपअप दिखाई दे, तो दूसरी बार
- छिपाने यह है कि कोई आइटम
- यह छिपाने उपयोगकर्ता अगर पॉपअप में चयन किया जाता है पर क्लिक किया: क्या यह करने की जरूरत यह है स्क्रीन
ये 4 चीजें काम करती हैं, लेकिन बूलियन ध्वज के कारण मैं उपयोग कर रहा हूं, अगर उपयोगकर्ता कहीं और क्लिक करता है या किसी आइटम का चयन करता है, तो मुझे दिखाए जाने से पहले बटन पर दो बार क्लिक करना होगा फिर से ऊपर। यही कारण है कि मैंने फोकस लिस्टनर (जो बिल्कुल जवाब नहीं दे रहा है) को ठीक करने और इन मामलों में झंडा झूठा सेट करने की कोशिश की।
संपादित करें: एक उत्तर पोस्ट में अंतिम प्रयास ...
यहाँ श्रोताओं हैं: (। यह एक वर्ग JButton विस्तार में है, इसलिए दूसरा श्रोता JButton पर है)
// Show popup on left click.
menu.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
System.out.println("LOST FOCUS");
isShowingPopup = false;
}
@Override
public void focusGained(FocusEvent e) {
System.out.println("GAINED FOCUS");
}
});
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("isShowingPopup: " + isShowingPopup);
if (isShowingPopup) {
isShowingPopup = false;
} else {
Component c = (Component) e.getSource();
menu.show(c, -1, c.getHeight());
isShowingPopup = true;
}
}
});
मैं इस समय से बहुत लंबे समय से लड़ रहा हूं। अगर कोई मुझे इस बारे में कोई संकेत दे सकता है कि इसमें क्या गलत है, तो यह बहुत अच्छा होगा!
धन्यवाद!
कोड:
public class Button extends JButton {
// Icon.
private static final ImageIcon ARROW_SOUTH = new ImageIcon("ArrowSouth.png");
// Unit popup menu.
private final JPopupMenu menu;
// Is the popup showing or not?
private boolean isShowingPopup = false;
public Button(int height) {
super(ARROW_SOUTH);
menu = new JPopupMenu(); // menu is populated somewhere else
// FocusListener on the JPopupMenu
menu.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
System.out.println("LOST FOCUS");
isShowingPopup = false;
}
@Override
public void focusGained(FocusEvent e) {
System.out.println("GAINED FOCUS");
}
});
// ComponentListener on the JPopupMenu
menu.addComponentListener(new ComponentListener() {
@Override
public void componentShown(ComponentEvent e) {
System.out.println("SHOWN");
}
@Override
public void componentResized(ComponentEvent e) {
System.out.println("RESIZED");
}
@Override
public void componentMoved(ComponentEvent e) {
System.out.println("MOVED");
}
@Override
public void componentHidden(ComponentEvent e) {
System.out.println("HIDDEN");
}
});
// ActionListener on the JButton
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("isShowingPopup: " + isShowingPopup);
if (isShowingPopup) {
menu.requestFocus();
isShowingPopup = false;
} else {
Component c = (Component) e.getSource();
menu.show(c, -1, c.getHeight());
isShowingPopup = true;
}
}
});
// Skip when navigating with TAB.
setFocusable(true); // Was false first and should be false in the end.
menu.setFocusable(true);
}
}
तो, मेरी मुख्य समस्या यह है कि फोकस प्राप्त() और फोकस लॉस्ट() कभी ट्रिगर नहीं होता है, भले ही मैं पॉपअप प्रकट करता हूं और गायब हो जाता हूं। – Joanis