Swing setDefaultButton geht nicht - Komponente fängt Events ab

Status
Nicht offen für weitere Antworten.

boorad

Mitglied
Hallo,

ich habe ein Problem: mit setDefaultButton habe ich einen Button gesetzt der bei ENTER gedrückt werden soll. Geht auch wenn ich vorher mit der Maus in einen freien Bereich klicke. Befindet sich der Fous aber in einer Komponente innerhalb der Rootpane (JScrollPane) geht das nicht. Wie kann ich das zur Rootpane weiterdelegieren ?

Grüße und Dank
Matt
 

Wildcard

Top Contributor
Hat die betreffende Component einen Eintrag in der Input-/ActionMap, die mit der Action für den Default Button konkurriert?
Ist in deinem gewählten Look and Feel Enter auch der richtige Button für den Default Button und nicht etwas zB Leertaste?
 

boorad

Mitglied
ich kann keinen Eintrag in der Actionmap finden. Ich habe testweise mit setDefaultButton den gewünschten Button gesetzt. Ich habe vermutlich die kritische Stelle gefunden: die Component ist eine Ableitung eines JTextfield mit überladenem processKeyEvent und dort wird vermutlich das Event konsumiert (consume):
Java:
   /**
   * Verarbeitung der KeyTyped Events
   * geht validateKey schief, wird das Event
   * nicht weitergereicht (kein Echo der gedrueckten Taste
   * @param event erhaltenes Event
   */
   public void processKeyEvent (KeyEvent event) {
      if (isEditable()) {
        if (event.getID() == KeyEvent.KEY_PRESSED) {
           inKeyPress = true;
           keyCode    = event.getKeyCode();
           super.processKeyEvent(event);
           return;
        }
        if (event.getID() == KeyEvent.KEY_TYPED) {
            if (!inKeyPress ||
                (keyCode == KeyEvent.VK_BACK_SPACE) ||
                (keyCode == KeyEvent.VK_ENTER)      ||
                (keyCode == KeyEvent.VK_TAB)        ||
                validateKey(event.getKeyChar())) {

              if (mode == MODE_UPCASE) {
                 event.setKeyChar (Character.toUpperCase(event.getKeyChar()));
              }
              super.processKeyEvent(event);
            } else {
              event.consume();
            }
            return;
        }
        if (event.getID() == KeyEvent.KEY_RELEASED) {
            inKeyPress = false;
            keyCode    = KeyEvent.VK_UNDEFINED;
            super.processKeyEvent(event);
            return;
        }
     }
   }

ich habe die Anwendung nicht selber geschrieben und muss mich dort reinarbeiten, deswegen kann ich da nicht einfach mit der Axt rangehen ...
 

boorad

Mitglied
so, ich noch mal.

Inzwischen habe ich versucht, mit ActionMap das ENTER innerhalb des JTextFields zum Auslösen eines JButton zu verwenden. Offenbar mache ich dabei noch was falsch denn ich bekommen zur Laufzeit java.lang.ClassCastExceptions und es funktioniert auch nicht.
Ich habe mir vom JButton die Action geholt (von der ich denke es ist die richtige), dann habe ich diese Action an das ENTER-Ereignis des JTextFields gebunden:
Java:
txtSearchCriteria[i] = new CAStringField (); // CAStringField extends JTextField
	        		
 // butSearch ist vom Typ JButton
Action actEnter = butSearch.getActionMap().get("pressed");
//Object actAll[] = butSearch.getActionMap().allKeys();
txtSearchCriteria[i].getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "bla");
txtSearchCriteria[i].getActionMap().put("bla", actEnter);

Ich würde mich über eure Tips freuen
Grüße
Matt
 

André Uhres

Top Contributor
Der DefaultButton ist der Button, der aktiviert wird, wenn ein UI-definiertes Aktivierungsereignis (gewöhnlich die Enter-Taste) in dem RootPane auftritt, unabhängig davon ob der Button Tastaturfokus hat (es sei denn es gibt eine andere Komponente innerhalb des RootPane, die das Aktivierungsereignis verbraucht, wie eine JTextArea, aber bei mir funktioniert es dann trotzdem noch mit Ctrl+Enter). Damit die default Aktivierung funktioniert, muss der Button ein Nachkomme des RootPane sein (und enabled!), wenn die Aktivierung auftritt.
 

boorad

Mitglied
André, das war mir vom Prinzip her schon einigermaßen klar - im ersten und dritten Post hatte ich ja beschrieben, dass der Button auch bei Enter ausgelöst wird - nur nicht wenn der Focus in einem Textfeld ist. Die von dir beschriebenen Bedingungen sollten doch aber damit erfüllt sein. Der Knackpunkt ist sicher das Entfernen des Events durch ProzessKeyEvent.

Das Problem habe ich nun wie folgt gelöst:
Java:
	...
	txtSearchCriteria[i] = new CAStringField ();
	txtSearchCriteria[i].setText( criterium.defaultValue != null ? criterium.defaultValue : "");
	panSearchCriteria.addComponent (txtSearchCriteria[i], col + 2, row, 1, 1 );
	        		
	// Bei Enter im Textfeld soll Suchen ausgelöst werden 
	Action doEnter = new AbstractAction() {
			private static final long serialVersionUID = 1L;

			public void actionPerformed(ActionEvent e) {
			butSearch.doClick();
		}
	};
	txtSearchCriteria[i].getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "myEnterDefaultAction1");
	txtSearchCriteria[i].getActionMap().put("myEnterDefaultAction1", doEnter);
	...

Anmerkungen dazu sind mir natürlich willkommen.

Grüße
Matt
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
komplettlost Vollbildmodus für MacOs Nutzer geht nicht AWT, Swing, JavaFX & SWT 13
B Swing Menü geht nicht AWT, Swing, JavaFX & SWT 5
izoards Bild ausdrucken - PageFormat setzen geht nicht AWT, Swing, JavaFX & SWT 5
J import javafx.fxml* bei JavaFX 13 geht nicht mehr AWT, Swing, JavaFX & SWT 7
S PatentComponent geht nicht? AWT, Swing, JavaFX & SWT 3
H automatische Anzahl der Spalten ermitteln -> geht nicht AWT, Swing, JavaFX & SWT 6
B JavaFX Wo liegt mein Gedankenfehler ??? KeyEvent geht nicht ... AWT, Swing, JavaFX & SWT 8
J Warum geht das nicht? if-else usw..... compilieren geht nicht -- HILFE!!! AWT, Swing, JavaFX & SWT 10
LexeB4F setValueAT geht nicht... wieso? AWT, Swing, JavaFX & SWT 14
T JLabel in die Mitte(JLabel.CENTER geht nicht) AWT, Swing, JavaFX & SWT 12
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
B Swing Form undecorated: Beim Bewegen geht die Maus immer automatisch zur linken Seite. AWT, Swing, JavaFX & SWT 7
I JavaFX - MP3 geht nicht AWT, Swing, JavaFX & SWT 4
N gewünschte ActionListener bei RadioButton mit isSelected geht nicht AWT, Swing, JavaFX & SWT 2
C Swing Update von swing-TableModels per Thread. Eins geht, das andere nicht, warum? AWT, Swing, JavaFX & SWT 12
S KeyListener geht nicht AWT, Swing, JavaFX & SWT 12
B JInternalFrame Focus setzten geht nicht AWT, Swing, JavaFX & SWT 2
D Swing fullscreen switch geht nicht richtig AWT, Swing, JavaFX & SWT 8
F Icongröße ändern, geht das ? AWT, Swing, JavaFX & SWT 2
Q Swing MouseListener auf JTable geht nicht AWT, Swing, JavaFX & SWT 2
0 JTable Spaltenbreite automatisch an Inhalt anpassne geht nicht AWT, Swing, JavaFX & SWT 3
antonbracke Multiplayer Shooter- Wie geht das mit Canvas & Graphics AWT, Swing, JavaFX & SWT 6
K Options-Frame integrieren (zum zuschalten und wegschalten wie geht man da ran? AWT, Swing, JavaFX & SWT 7
R JTextField mit abgerundeten Ecken - Geht über Grenze hinaus AWT, Swing, JavaFX & SWT 4
B Java und ansprechende Benutzeroberflächen - geht das? AWT, Swing, JavaFX & SWT 16
V Swing Custom JToggleButton in JTable - Click-Event geht erst beim zweiten Mal AWT, Swing, JavaFX & SWT 7
C Java2D Transparenz geht bei einfärben verloren AWT, Swing, JavaFX & SWT 7
T transparent geht nicht (btw: rechteck) AWT, Swing, JavaFX & SWT 13
E Null-Layout - Wie geht es ohne? AWT, Swing, JavaFX & SWT 19
Y LookAndFeel Nimbus einschalten geht nicht AWT, Swing, JavaFX & SWT 31
M Bild aus .jar Archiv laden geht nicht AWT, Swing, JavaFX & SWT 6
L Stopp Button geht nicht AWT, Swing, JavaFX & SWT 2
S JDesktopPane bei Button-Klick anzeigen geht nicht AWT, Swing, JavaFX & SWT 5
D JList Scrollbar machen geht nicht AWT, Swing, JavaFX & SWT 4
J Label mit transparentem hintergrund - geht das? AWT, Swing, JavaFX & SWT 21
H Sub-Dialog von modalem JDialog aus aufrufen - geht das? AWT, Swing, JavaFX & SWT 6
B Panels stapeln, geht das? AWT, Swing, JavaFX & SWT 7
P SetBounds auf JPanel geht nicht! AWT, Swing, JavaFX & SWT 2
S SWT Composite mit Layout Manager geht nicht AWT, Swing, JavaFX & SWT 4
S JPanel geht über Rand hinaus AWT, Swing, JavaFX & SWT 7
E setAlwaysOnTop geht verloren AWT, Swing, JavaFX & SWT 3
B Swing Variable in JTextfield geht nicht AWT, Swing, JavaFX & SWT 10
M FileFilter geht nicht AWT, Swing, JavaFX & SWT 5
A repaint() geht nicht ? AWT, Swing, JavaFX & SWT 5
D Jlist auf 10 Zeilen begrenzen geht bei mir nicht AWT, Swing, JavaFX & SWT 2
D Runtime.getRuntime.exec() + SWT oder Swing = geht nicht AWT, Swing, JavaFX & SWT 2
M Action.DISPLAYED_MNEMONIC_INDEX_KEY geht nicht mehr AWT, Swing, JavaFX & SWT 2
F JScrollPane setLayout geht nicht AWT, Swing, JavaFX & SWT 2
R MVC: System.out.prinln in View umleiten geht nicht richtig AWT, Swing, JavaFX & SWT 7
B MouseListener / doppelklick geht net AWT, Swing, JavaFX & SWT 16
G JToggleButton pressed geht nicht AWT, Swing, JavaFX & SWT 2
G setLocationRelativeTo(frame) geht plötzlich nicht mehr AWT, Swing, JavaFX & SWT 3
G fireTableDataChanged() geht das auch ohne vector? AWT, Swing, JavaFX & SWT 13
Z Buttons erscheinen erst wenn man mit der Maus drüber geht AWT, Swing, JavaFX & SWT 7
P GridBagLayout einfaches Beispiel geht nicht? AWT, Swing, JavaFX & SWT 5
I Tastur eingabe geht nicht (wenn Button vorhanden) AWT, Swing, JavaFX & SWT 5
W Swing, 2 JProgressbars und threads geht das? AWT, Swing, JavaFX & SWT 2
X JTable "geht" erst beim 2.Klick AWT, Swing, JavaFX & SWT 2
I JRadioButton disablen geht nicht AWT, Swing, JavaFX & SWT 4
M Wieso geht das nicht! AWT, Swing, JavaFX & SWT 3
G JDialog hinter Glasspane von JFrame. Geht das? AWT, Swing, JavaFX & SWT 3
P [SWT] - ProgressBar, Prozentzahlen live anzeigen geht nicht AWT, Swing, JavaFX & SWT 13
W netbeans projekt in Eclipse importieren -gui teil geht nicht AWT, Swing, JavaFX & SWT 5
V JTable - farbige Boolean-Felder - geht das? AWT, Swing, JavaFX & SWT 3
O Panels ein und ausblenden - geht das? AWT, Swing, JavaFX & SWT 3
T Look and Feel ändern geht nicht, obwohl es geht. AWT, Swing, JavaFX & SWT 2
F Serialisiertes Object geht nicht zu Inizialisieren AWT, Swing, JavaFX & SWT 7
K setSize und setLocation geht nicht AWT, Swing, JavaFX & SWT 8
S JFileChooser Pfadübergabe mit Leerzeichen geht nicht AWT, Swing, JavaFX & SWT 6
G Warum geht das nicht? AWT, Swing, JavaFX & SWT 3
S JScrollPane in einem JDialog = geht nicht? AWT, Swing, JavaFX & SWT 14
B Layoutvorgabe: Geht so was überhaupt? AWT, Swing, JavaFX & SWT 5
S Animation geht nicht AWT, Swing, JavaFX & SWT 3
S JLabel zeilenumbruch ? geht das in JDialog? AWT, Swing, JavaFX & SWT 2
T Paint-Methode geht nicht AWT, Swing, JavaFX & SWT 5
R Wie geht dieser Effekt? AWT, Swing, JavaFX & SWT 15
I SWT - Browser.setUrl(url) geht nicht :-( AWT, Swing, JavaFX & SWT 6
M Antialiasing geht . bis zum repaint ! AWT, Swing, JavaFX & SWT 4
J Jar Datei geht nicht richtig AWT, Swing, JavaFX & SWT 7
S JTextArea background Transparent geht nicht AWT, Swing, JavaFX & SWT 23
raptorrs Swing, Datenformate und wie geht der Datentransfer? AWT, Swing, JavaFX & SWT 8
M setOpaque() geht. und geht nicht :-( AWT, Swing, JavaFX & SWT 2
A Zeichnen auf zwei Labels. Geht nit AWT, Swing, JavaFX & SWT 7
R Farbcode geht nicht AWT, Swing, JavaFX & SWT 4
I setUndecorated geht nicht. AWT, Swing, JavaFX & SWT 3
G Zugriff auf TextField geht nicht AWT, Swing, JavaFX & SWT 5
L JComboBox befüllen geht nicht. AWT, Swing, JavaFX & SWT 18
G jbutton mit linebreak. setEnabled geht nicht mehr AWT, Swing, JavaFX & SWT 4
J Gleitende Fenster in Java - geht das? AWT, Swing, JavaFX & SWT 2
G Look&Feel geht nicht AWT, Swing, JavaFX & SWT 3
B Jlist getSelectedIndices geht net AWT, Swing, JavaFX & SWT 2
Z JScrollPane geht nicht AWT, Swing, JavaFX & SWT 7
F Internes Frame RICHTIG schließen..geht das überhaupt ? AWT, Swing, JavaFX & SWT 2
N Methode für Bild laden geht nur in der eigenen Klasse... AWT, Swing, JavaFX & SWT 3
A Speichern-Dialog geht nicht weg AWT, Swing, JavaFX & SWT 13
A Scrollen von Fenster geht nicht AWT, Swing, JavaFX & SWT 4
R GUI geht nicht! AWT, Swing, JavaFX & SWT 2
P Image in JApplet geht nicht AWT, Swing, JavaFX & SWT 2
richis-fragen Spaltenbreite bei drag nicht änderbar AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben