Программа-обработчик событий в java… Программы не выдают ошибок, но после события действие не отображается

1

Я импортировал все необходимые классы и ошибок не было. Но когда я нажимаю кнопку ввода в любом текстовом поле, окно приглашения пустое, а не строка, которую она намеревается показать. Я не хочу, если проблема с JOptionPane или что. Когда я запускаю свой код в первый раз, он работал нормально во втором запуске, появляется пустое приглашение.

public class fish extends JFrame{

    private JTextField item1;
    private JTextField item2;
    private JTextField item3;
    private JPasswordField password;

    public fish(){
        super("Title");
        setLayout(new FlowLayout());

        item1=new JTextField(10);
        add (item1);
        item2=new JTextField("Enter Txt here");
        add (item2);
        item3=new JTextField("Uneditable",20);
        item3.setEditable(false);
        add (item3);

        password = new JPasswordField("MyPass");
        add(password);

        thehandler handler = new thehandler();
        item1.addActionListener(handler);
        item3.addActionListener(handler);
        item2.addActionListener(handler);
        password.addActionListener(handler);
    }

    private class thehandler implements ActionListener{

        public void actionPerformed(ActionEvent event){

            String string = "";

            if(event.getSource()==item1)
                String.format("field1: %s", event.getActionCommand());
            else if(event.getSource()==item2)
                    String.format("field2: %s", event.getActionCommand());
            else if(event.getSource()==item3)
                    String.format("field3: %s", event.getActionCommand());
            else if(event.getSource()==password)
                    String.format("Password Field: %s", event.getActionCommand());

            JOptionPane.showMessageDialog(null, string);
        }
    }
}

public class apples{
    public static void main(String args[]){

        fish tuna = new fish();
        tuna.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        tuna.setSize(350,100);
        tuna.setVisible(true);
    }
}
Теги:
swing
event-handling
events
jframe

1 ответ

3
Лучший ответ

Вы показываете пустую строку. Вот:

public void actionPerformed(ActionEvent event){

    String string = "";

    if(event.getSource()==item1) 
        String.format("field1: %s", event.getActionCommand());
    else if(event.getSource()==item2)
            String.format("field2: %s", event.getActionCommand());
    else if(event.getSource()==item3)
            String.format("field3: %s", event.getActionCommand());
    else if(event.getSource()==password)
            String.format("Password Field: %s", event.getActionCommand());

    JOptionPane.showMessageDialog(null, string);
}

Где вы назначаете что-либо переменной String, string? Кроме того, вы никогда не получаете текст из JTextField, а скорее строку ActionCommand, которая никогда не была назначена.

т.е.

public void actionPerformed(ActionEvent event){

    String string = "";

    if(event.getSource()==item1) {
        string = String.format("field1: %s", item1.getText())
    }
    else if(event.getSource()==item2) {
        string = String.format("field2: %s", item2.getText());
    }
    else if(event.getSource()==item3) {
        string = String.format("field3: %s", item3.getText());
    }
    else if(event.getSource()==password) {
        string = String.format("Password Field: %s", new String(password.getPassword()));
    }

    JOptionPane.showMessageDialog(null, string);
}
  • Как в стороне, в реальной программе вы никогда не захотите делать new String(password.getPassword()), так как это делает вашу программу очень небезопасной, поскольку пароль будет легко украсть.
  • Помимо # 2: на этом этапе обучения в программировании вы захотите обернуть каждый блок в {} фигурные скобки. Лучше быть в безопасности, чем потом сожалеть.
  • Помимо # 3: вы захотите изучить и использовать соглашения о кодировании Java, включая предоставление имен классов, начинающихся с букв верхнего регистра. Таким образом, другие смогут лучше понять ваш код с первого взгляда.
  • 1
    строка actioncommand () будет отображать команду (или в данном случае строку), поэтому мне не нужно использовать getText ().
  • 0
    и спасибо за помощь, я получил ошибку, что я не назначил строку ни к чему.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню