3 Stimmen

Weiter mit der Eingabetaste

Ich habe ein JDialog, das zwei Felder hat, Benutzername und Passwort. Ich möchte das Formular wie ein normales Formular gestalten, in dem das Drücken der Eingabetaste wie das Drücken von "Weiter" ist.

Ich habe bereits versucht getRootPane().setDefaultButton(myButton); aber nur das scheint nicht zu funktionieren.

4voto

mKorbel Punkte 109073

Ich habe bereits versucht, getRootPane().setDefaultButton(myButton);, aber nur das scheint nicht zu funktionieren.

dann müssen Sie den Code für diese Schaltfläche mit der Methode

JButton#doClick();

besser wäre jedoch die Verwendung von KeyBindings

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.Timer;
import javax.swing.border.EmptyBorder;

public class Test {

    private static final long serialVersionUID = 1L;
    private JDialog dialog = new JDialog();
    private final JPanel contentPanel = new JPanel();
    private Timer timer1;
    private JButton killkButton = new JButton("Kill JDialog");
    private JButton okButton = new JButton("OK");

    public Test() {
        contentPanel.setLayout(new FlowLayout());
        contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
        JPanel buttonPane = new JPanel();
        okButton.setActionCommand("OK");
        buttonPane.add(okButton);
        killkButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        killkButton.setActionCommand("Kill JDialog");
        buttonPane.add(killkButton);
        dialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
        dialog.addWindowListener(new WindowListener() {

            public void windowOpened(WindowEvent e) {
            }

            public void windowClosing(WindowEvent e) {
                startTimer();
            }

            public void windowClosed(WindowEvent e) {
            }

            public void windowIconified(WindowEvent e) {
            }

            public void windowDeiconified(WindowEvent e) {
            }

            public void windowActivated(WindowEvent e) {
            }

            public void windowDeactivated(WindowEvent e) {
            }
        });
        dialog.setLayout(new BorderLayout());
        dialog.getRootPane().setDefaultButton(okButton);
        dialog.add(buttonPane, BorderLayout.SOUTH);
        dialog.add(contentPanel, BorderLayout.CENTER);
        dialog.pack();
        dialog.setLocation(100, 100);
        dialog.setVisible(true);
        setKeyBindings();
    }

    private void setKeyBindings() {
        okButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
                KeyStroke.getKeyStroke("ENTER"), "clickENTER");
        okButton.getActionMap().put("clickENTER", new AbstractAction() {

            private static final long serialVersionUID = 1L;

            @Override
            public void actionPerformed(ActionEvent e) {
                dialog.setVisible(false);
                startTimer();
            }
        });
    }

    private void startTimer() {
        timer1 = new Timer(1000, new AbstractAction() {

            private static final long serialVersionUID = 1L;

            @Override
            public void actionPerformed(ActionEvent e) {
                SwingUtilities.invokeLater(new Runnable() {

                    @Override
                    public void run() {
                        dialog.setVisible(true);
                    }
                });
            }
        });
        timer1.setDelay(500);
        timer1.setRepeats(false);
        timer1.start();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                Test test = new Test();
            }
        });
    }
}

2voto

Jeffrey Punkte 43636
JButton button = ...
JTextField password = ...
ActionListener buttonListener = ...

button.addActionListner(buttonListener);
password.addActionListener(buttonListener);

Wenn die Eingabetaste in einer JTextField wird ein Aktionsereignis ausgelöst.

1voto

Pjrat111 Punkte 213

Sie können dies erreichen, indem Sie einen Action-Listener zu Ihrem Textfeld hinzufügen, etwa so.

JTextField field1 = new JTextField();

field1.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {

        //here is your method to continue
        continue();

        }

    });

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X