Hallo,
hab ein Problem und komme einfach nicht weiter, trotz suche im Forum. Suchmaschine hilft leider auch nicht weiter.
Hier erstmal mein Quellcode:
Nun die Beschreibung:
Ich würde gerne ein JPopupMenu aufrufen und dann mit der Entertaste, Leertaste oder mit Mausklick ein JMenuItem auswählen.
So wenn ich nun im JMenuItem ein actionPerformed benutze, funktioniert es auch doch wenn ich enter drücke bleibt das enter im Buffer und ruft dann wieder das JPopupMenu auf.
Ich würde gerne für das JMenuItem ein keyReleased verwenden, aber das JPopupMenu ruft dann die methode nicht auf.
Vielleicht hat jemand einen Tipp, wie man das JPopupMenu so verändert, dass es erst verschwindet wenn ich eine Tast los lasse und nicht schon beim drücken verschwindet.
Gruß aus Gummersbach
hab ein Problem und komme einfach nicht weiter, trotz suche im Forum. Suchmaschine hilft leider auch nicht weiter.
Hier erstmal mein Quellcode:
Java:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.SwingUtilities;
public class PopupTest extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JPopupMenu jPopupMenu = null;
private JMenuItem jMenuItem1 = null;
private JMenuItem jMenuItem2 = null;
public JButton jButton = null;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
PopupTest thisClass = new PopupTest();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}
public PopupTest() {
super();
initialize();
getJPopupMenu();
}
private void initialize() {
this.setSize(300, 200);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
}
private JPanel getJContentPane() {
if (jContentPane == null) {
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
jContentPane = new JPanel();
jContentPane.setLayout(new GridBagLayout());
jContentPane.add(getJButton(), gridBagConstraints);
}
return jContentPane;
}
private JPopupMenu getJPopupMenu() {
if (jPopupMenu == null) {
jPopupMenu = new JPopupMenu();
jPopupMenu.add(getJMenuItem1());
jPopupMenu.add(getJMenuItem2());
}
return jPopupMenu;
}
private JMenuItem getJMenuItem1() {
if (jMenuItem1 == null) {
jMenuItem1 = new JMenuItem();
jMenuItem1.setText("Item1 mit keyReleased oder MouseClicked");
jMenuItem1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent e) {
System.out.println(e.getKeyCode());
if (e.getKeyCode() == 10 || e.getKeyCode() == 32) {
// enter oder leerzeichen
macheEtwas();
}
}
});
jMenuItem1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
if (e.getButton() == 1) {
macheEtwas();
}
}
});
}
return jMenuItem1;
}
private JMenuItem getJMenuItem2() {
if (jMenuItem2 == null) {
jMenuItem2 = new JMenuItem();
jMenuItem2.setText("Item2 mit actionPerformed");
jMenuItem2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
macheEtwas();
}
});
}
return jMenuItem2;
}
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setText("start popup");
jButton.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent e) {
System.out.println(e.getKeyCode());
if (e.getKeyCode() == 10 || e.getKeyCode() == 32) {
// enter oder leerzeichen
jPopupMenu.show(jButton, 0, 0);
}
}
});
jButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
if (e.getButton() == 1) {
jPopupMenu.show(jButton, 0, 0);
}
}
});
}
return jButton;
}
private void macheEtwas() {
System.out.println("es funktioniert :-)");
}
}
Nun die Beschreibung:
Ich würde gerne ein JPopupMenu aufrufen und dann mit der Entertaste, Leertaste oder mit Mausklick ein JMenuItem auswählen.
So wenn ich nun im JMenuItem ein actionPerformed benutze, funktioniert es auch doch wenn ich enter drücke bleibt das enter im Buffer und ruft dann wieder das JPopupMenu auf.
Ich würde gerne für das JMenuItem ein keyReleased verwenden, aber das JPopupMenu ruft dann die methode nicht auf.
Vielleicht hat jemand einen Tipp, wie man das JPopupMenu so verändert, dass es erst verschwindet wenn ich eine Tast los lasse und nicht schon beim drücken verschwindet.
Gruß aus Gummersbach