Auslösung von Aktionen über Tastatur (Netbeans)

Status
Nicht offen für weitere Antworten.

jupp61

Mitglied
Hallo,
ich habe meine Entwicklungsumgebung von Eclipse auf Netbeans umgestellt. Dort ist ja gleich die Erstellung von grafischen Oberflächen leicht möglich.

Allerdings habe ich bei der Erstellung der "mitgelieferten" Muster festgestellt, dass z.B. Buttons nicht mit der Enter-Taste sondern mit der Space-Taste ausgelöst werden. Das finde ich äußerst gewöhnungsbedürftig. Ist das änderbar? Habe ich was vergessen?

Vielen Dank für Unterstützung.

Gruß
Jupp
 

The_S

Top Contributor
Ne, das is das Standard-Java verhalten und eigentlich überall so ;) . Du könntest die ActionMap bearbeiten, wenn ich das richtig im Kopf habe.
 

jupp61

Mitglied
Hallo,
:( bin noch kein alter Java Hase. Kannst du das etwas genauer erläutern? Beispiel?

Wäre toll.

Danke
Jupp
 

Wildcard

Top Contributor
Wie Buttons aktiviert werden hängt vom Look and Feel ab.
Gnome -> Leertaste
Java Cross Platform Look and Feel -> Leertaste
Windows -> Enter
 

jupp61

Mitglied
Also aktuelles IST bei meinem Testprogramm ist die Leertaste und zwar unter Windows. Und nun?

Thanks for help
Jupp
 

Wildcard

Top Contributor
Weil du nicht das System Look and Feel verwendest, sondern das Java Cross Platform Look and Feel.
 

jupp61

Mitglied
Danke für Hinweis. Hat funktioniert mit:

Code:
   private void setLookAndFeel(){
      	// Hilfsroutine für das Erscheinungsbild
	// ermittlen Fensterstil der Plattform
	try{
		UIManager.setLookAndFeel(
				UIManager.getSystemLookAndFeelClassName());
		SwingUtilities.updateComponentTreeUI(this);
	}catch (Exception e){
		System.err.println("Couldn't use the system look and feel :" + e);
	}
    }

leider nur für das Hauptfenster im Programm.

Wie kann ich das auch für ein Sub-Fenster gelten lassen?

Prog-Struktur
Code:
public class FMain extends javax.swing.JFrame {
    
    /** Creates new form FMain */
    public FMain() {
        super("Hauptwindow");
        initComponents();
        centerWin(this);
        setLookAndFeel();
    }


    private void openSubWin(java.awt.event.ActionEvent evt) {                                          
// Fenster für die Eingabe im Sub-Winöffnen
        setLookAndFeel();
        JFrameSubWin.setVisible(true);
    }


Danke für Support
Jupp
 

Wildcard

Top Contributor
Setz das look and feel ganz am Anfang (in main zB), dann sparst du dir erstens das updateComponentTree und zweitens löst das dein Problem.
 

André Uhres

Top Contributor
Der DefaultButton reagiert auf Enter, unabhängig vom L&F.
Man könnte über einen FocusListener auch dafür sorgen,
dass der jeweils fokusierte Button zum DefaultButton wird.
Zum Beispiel bei einem OK-Button und einem CANCEL-Button:
Code:
       getRootPane().setDefaultButton(okButton);
        FocusAdapter resetDefaultButton = new FocusAdapter() {
                    @Override
			public void focusGained(FocusEvent e) {
                        JButton button = (JButton) e.getSource();
                        getRootPane().setDefaultButton(button);
                    }
                    @Override
			public void focusLost(FocusEvent e) {
                        getRootPane().setDefaultButton(okButton);
                    }
                };
        cancelButton.addFocusListener(resetDefaultButton);
 

Wildcard

Top Contributor
@André
Das sollte man keinesfalls tun.
Bei GUIs sollte das Prinzip der geringsten Überraschung gelten.
Das bedeutet das Programm muss sich so verhalten wie die Programme an die der Nutzer gewöhnt ist.
Mit so einem Snippet kann man höchstens Linux (und Mac?) User ärgern. :wink:
 

Wildcard

Top Contributor
Bei Gnome zB aktiviert Enter den Default Button und die Leertaste den fokusierten.
Als Entwickler sollte man sich an das L'n'F des Benutzers halten und das Verhalten nicht mutwillig verbiegen.
Dafür gibt's das System L'n'F schließlich.
 

André Uhres

Top Contributor
So schlimm wirds nicht sein: unter Java 3 z.B. reagiert der fokusierte Button auch beim Java Look and Feel auf Enter. :wink:
Jedenfalls ist der Workaround im Sinne des Fragestellers.
 

Wildcard

Top Contributor
So schlimm wirds nicht sein
offensichtlich schlimm genug um dafür einen Thread zu öffnen.
Jedenfalls ist der Workaround im Sinne des Fragestellers.
Warum den Workaround vorziehen? Damit wird's für einen Windows Nutzer intuitiver, dafür hat dann der Linux Nutzer das Problem.
Nimmt man das System Look and Feel macht man es beiden Recht.
unter Java 3 z.B. reagiert der fokusierte Button auch beim Java Look and Feel auf Enter.
Das Cross Platform Look and Feel ist ja bewusst auf allen Plattformen gleich und stimmt mit keiner Plattform überein.
Der Unterschied ist sofort zu erkennen insofern darf es sich auch anders verhalten. Wenn sie da was ändern... was soll's.
Das sich Cross Platform (Metal/Aqua) nicht durchsetzen konnte liegt neben der Optik genau daran. Es verhält sich eben anders. Mit den System Look and Feel kann man es besser machen, also soll man es bitte auch so tun.
 

André Uhres

Top Contributor
Das was für den Fragesteller schlimm ist, das ist ja gerade das, was durch den Workaround behoben wird.
Welches L&F man schliesslich vorzieht ist wohl eher Geschmackssache.
Ausserdem wird auch ein Linux Nutzer kaum Schwierigkeiten damit haben, weil die Leertaste auch noch unterstützt wird und der DefaultButton jeweils optisch hervorgehoben wird.
 

Wildcard

Top Contributor
1. Ich gehe davon aus, dass das Problem durch setzen des Look and Feels bereits behoben ist
2. Wenn man sich bewußt für das Cross Plattform L'n'F entscheidet (und nicht nur aus Unkenntniss über die Alternativen), dann sollte man das L'n'F trotzdem in Ruhe lassen -> Prinzip der geringsten Überraschung.
 

André Uhres

Top Contributor
Es ist gut möglich dass das Problem durch das System L&F behoben ist, das will ich gar nicht bestreiten.
Ich will lediglich eine Alternative zeigen, für den Fall wo jemand ein anderes L&F wünscht.
Der Workaround darf auch keinesfalls als "verbiegen" angesehen werden: es ist eine legitime Alternative innerhalb des L&F.
 

Wildcard

Top Contributor
Zeig mir ein Programm bei dem der Default Button springt?
Und das ist für dich nicht überraschend?
 

André Uhres

Top Contributor
Wenn man den CANCEL-Button fokusiert, Enter drückt und dann feststellt, dass der OK-Button aktiviert wurde, das ist wohl schon etwas mehr als überraschend, u.U. sogar katastrophal, weil eventuell eine wichtige Datei gelöscht wurde :wink:
 

Wildcard

Top Contributor
Wenn ich den Ok Button fokusiere, Enter drücke (im guten Gewissen das der Default Button ausgeführt wird der ursprünglich der cancel button war) und dann trotzdem der ok Button aktiviert wird, ist es nicht weniger dramatisch.
 

André Uhres

Top Contributor
Jetzt hast du aber ein etwas verdrehtes Beispiel da angeführt.
Ich würde sagen, dass in einem solchen Fall der OK Button nicht fokusierbar sein sollte.
 

thE_29

Top Contributor
Ums generell auf was zu setzen, wie gehabt von den FAQ ist dies mit InputMap´s zu manipulieren..

Code:
javax.swing.plaf.InputMapUIResource res = (javax.swing.plaf.InputMapUIResource)javax.swing.UIManager.getDefaults().get("Button.focusInputMap");
    javax.swing.KeyStroke enterPressed = javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ENTER,0,false);
    javax.swing.KeyStroke enterReleased = javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ENTER,0,true);
    res.put(enterPressed,"pressed");
    res.put(enterReleased,"released");
Schon funktioniert es via Leertaste und Enter auf jedem Button!

Ich selbst finde das mit dem Defaultbutton auch selten blöd...

Es wird ein 2t Button fokusiert und wenn man enter drückt wird der defaultbutton aufgerufen...

Aber wenn man die InputMap so manipuliert wie oben, reagiert der fokusierte Button zuerst aufs Enter und es würde meines Erachtens passen!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Parallele Aktionen in Java FX richtig durchführen. AWT, Swing, JavaFX & SWT 5
S Swing Gui Aktionen verlangsamen AWT, Swing, JavaFX & SWT 8
M Swing - Aktionen wiederverwenden AWT, Swing, JavaFX & SWT 9
C actionPerformed mit mehren Aktionen AWT, Swing, JavaFX & SWT 3
N Ein Button für zwei Aktionen AWT, Swing, JavaFX & SWT 7
W SWING - Aktionen in Toolbar hinzufügen AWT, Swing, JavaFX & SWT 2
G Aktionen bei Checkboxen AWT, Swing, JavaFX & SWT 2
K Graphics und Aktionen AWT, Swing, JavaFX & SWT 7
K JMenu Aktionen AWT, Swing, JavaFX & SWT 3
M 1 Button mehrere Aktionen?? AWT, Swing, JavaFX & SWT 11
I JTextfield senden über Enter AWT, Swing, JavaFX & SWT 1
T Scene wechseln über ManuItem AWT, Swing, JavaFX & SWT 7
I JavaFX - Pane wechseln über 2. Controller AWT, Swing, JavaFX & SWT 5
melaniemueller Layout wechseln über RadioButtons AWT, Swing, JavaFX & SWT 4
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
A Layoutwechsel über RadioButtons AWT, Swing, JavaFX & SWT 3
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
missy72 JavaFX Performance / ImageView in TableView über TimeLine AWT, Swing, JavaFX & SWT 1
T TableView über Methode befüllen AWT, Swing, JavaFX & SWT 10
J Spielfelder auch über die Tastatureingabe (1…9) ansteuern (Tic Tac Toe) AWT, Swing, JavaFX & SWT 2
M Eine Datei auf den Apache Server hochladen - über das Menü im JavaProgramm AWT, Swing, JavaFX & SWT 7
C Swing Aufruf der Funktion (die ein Dialog anzeigt) über Symbol anzeigen lassen AWT, Swing, JavaFX & SWT 4
G LayoutManager Panels anordnen über Schleifenvariablen AWT, Swing, JavaFX & SWT 7
F Verzeichnis über GUI erstellen AWT, Swing, JavaFX & SWT 2
T GUI über Tastatur bedienen AWT, Swing, JavaFX & SWT 3
OSchriever Layout über Radiobuttons ändern AWT, Swing, JavaFX & SWT 4
L JavaFX TreeView Edit Mode über F2 AWT, Swing, JavaFX & SWT 13
J Schriftart über einen Button ändern AWT, Swing, JavaFX & SWT 1
CptK Swing DropdownMenu über Panel-Grenzen hinaus anzeigen AWT, Swing, JavaFX & SWT 1
A 2D-Grafik Zeichen werden über unabhängingen JRadioButton nicht gefüllt AWT, Swing, JavaFX & SWT 28
S JavaFX Fenster aufkommen lassen, wenn mit der Maus über bestimmten Bereich fahren AWT, Swing, JavaFX & SWT 1
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
C JavaFX ScrollPane schießt über das Ziel hinaus... AWT, Swing, JavaFX & SWT 1
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
R Ausgabe über JOptionPane.showMessageDialog funktioniert nicht AWT, Swing, JavaFX & SWT 2
L JavaFX button über andere Klasse ändern AWT, Swing, JavaFX & SWT 7
K über Button andere Java Klasse aufrufen AWT, Swing, JavaFX & SWT 15
T .jar-Datei lässt sich unflexibler ausführen als über die IDE AWT, Swing, JavaFX & SWT 11
C Applet Zeichnen über Button-Click AWT, Swing, JavaFX & SWT 13
L JavaFX Hover Effekt über das Parent Element AWT, Swing, JavaFX & SWT 4
C JavaFX GUI - Entscheidung über Framework AWT, Swing, JavaFX & SWT 4
A Swing Gemaltes Bild über saveDialog speichern unter AWT, Swing, JavaFX & SWT 15
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
S AWT Daten über TextField und Button in array speichern AWT, Swing, JavaFX & SWT 5
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
Augenblau JavaFX Externe Schriftart über CSS ansprechen und zuweisen AWT, Swing, JavaFX & SWT 5
T Generische Klasse in JList über DefaultListModel AWT, Swing, JavaFX & SWT 1
Z JAVAFX Stage über Controller weitergeben um css-file zu laden AWT, Swing, JavaFX & SWT 4
Z Absolutes Layout / Kontrolle über Anordnung AWT, Swing, JavaFX & SWT 3
wolfgang63 JavaFX Zugriff auf Guiobjekte die über FXML erstellt wurden AWT, Swing, JavaFX & SWT 2
O JTextfield wird über'drawed'.. AWT, Swing, JavaFX & SWT 6
K JavaFX Fenster aufrufen über Menü AWT, Swing, JavaFX & SWT 1
J JTable aktuallisieren über anderen Frame AWT, Swing, JavaFX & SWT 6
kaoZ Swing JFrame lässt sich nicht über dispose() abbauen AWT, Swing, JavaFX & SWT 0
P Vorteile von Tooltip nutzen (wird über allen anderen Objekten angezeigt) AWT, Swing, JavaFX & SWT 3
elischa JFrame über mehrere JPanel und Listener AWT, Swing, JavaFX & SWT 17
B Swing Borderlayout East über North AWT, Swing, JavaFX & SWT 5
D Swing Letzte Zeile einer JTable nicht über RowSorter sotieren AWT, Swing, JavaFX & SWT 2
C Methode über Buttonklick starten AWT, Swing, JavaFX & SWT 8
P Swing Panel-austausch über einen MenuListener AWT, Swing, JavaFX & SWT 2
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
P Swing Button über gesamtes Panel AWT, Swing, JavaFX & SWT 2
3 JDialog über einem Vollbildfenster anzeigen AWT, Swing, JavaFX & SWT 5
K GUI Elemente über eine separate Textdatei beschriften? AWT, Swing, JavaFX & SWT 4
A Bild über Imageviewer auf GUI anzeigen AWT, Swing, JavaFX & SWT 3
K 2D-Grafik Kontrastanpassung über einen JSlider AWT, Swing, JavaFX & SWT 2
G JScrollPane über JScrollPane AWT, Swing, JavaFX & SWT 2
L Button über/auf JTextField AWT, Swing, JavaFX & SWT 5
A Swing JTable wird nicht über zurückegebene Referenz geaddet.Wieso nicht? AWT, Swing, JavaFX & SWT 5
D JTextField über ein Game AWT, Swing, JavaFX & SWT 11
K Action Listener implementieren über Objekt AWT, Swing, JavaFX & SWT 14
bluerob Fehler bei Wertübermittlung über KeyListener AWT, Swing, JavaFX & SWT 3
R JTextField mit abgerundeten Ecken - Geht über Grenze hinaus AWT, Swing, JavaFX & SWT 4
S JDialog direkt über dem MainFrame aufpoppen lassen AWT, Swing, JavaFX & SWT 2
X Swing Panel Extra Klasse & Aufruf über Button AWT, Swing, JavaFX & SWT 18
J Frame mit Button erstellen - Warum ist es nötig, Frame über Unterklasse zu erstellen? (Reg Listener) AWT, Swing, JavaFX & SWT 2
P versch. JPanel Klassen über Menü öffnen AWT, Swing, JavaFX & SWT 12
P Öffnen, Speichern von Dat. über DialogBoxen AWT, Swing, JavaFX & SWT 10
R Bewglichen Rahmen über einem Bild AWT, Swing, JavaFX & SWT 3
P Listenelemente über Checkbox löschen AWT, Swing, JavaFX & SWT 6
H Swing "Drag and Drop" eines JComponent über ein JPanel AWT, Swing, JavaFX & SWT 2
S SWT Anzeigen einer lokalen HTML-Seite im Browser Widget über RAP nicht möglich AWT, Swing, JavaFX & SWT 3
D Label über JScrollPane AWT, Swing, JavaFX & SWT 3
M TextArea über mehrere Zeilen - wie Zeileanzahl abfragen? AWT, Swing, JavaFX & SWT 5
C Linien über GridLayout zeichnen AWT, Swing, JavaFX & SWT 3
S JDialog über Applet AWT, Swing, JavaFX & SWT 3
K Swing JButton über JLabel AWT, Swing, JavaFX & SWT 6
S AWT Skalieren von Polygon über Area klappt nicht AWT, Swing, JavaFX & SWT 4
C Etwas durchsichtig machen über einem Panel AWT, Swing, JavaFX & SWT 7
L LayoutManager Componenten über verfügbaren Platz strecken AWT, Swing, JavaFX & SWT 7
C Java-applikation über Fullscreen AWT, Swing, JavaFX & SWT 4
F Panels über buttons zu anderen Panels hinzufügen AWT, Swing, JavaFX & SWT 2
S JTable Filter nach Wort oder Wortteil über ganze Tabelle AWT, Swing, JavaFX & SWT 5
M Hover-Farbe über Hintergrundfarbe legen AWT, Swing, JavaFX & SWT 3
A Swing Gleichmäßige Verteilung der Tabellenzeilen über den gesammten Tabellenbereich AWT, Swing, JavaFX & SWT 5
S JButton und textfield.setText - Komponenten über-/verdecken sich AWT, Swing, JavaFX & SWT 15

Ähnliche Java Themen

Neue Themen


Oben