Получите информацию от JTextfield

1

Я был в состоянии сделать код делать то, что я хочу, за исключением того, что я не могу получить от этого информацию. Теперь я хочу получить текст из поля JTextfield и вернуть его основному методу, который создает объект фрейма. Может кто-нибудь помочь мне получить входные данные из следующего кода?

 package assignment5;

    import java.awt.*;
    import java.awt.event.*;

    import javax.swing.*;

    public class Frame2 extends JDialog implements ActionListener 
    {

        private String a;
        private JTextField field = new JTextField(30); 

        public Frame2(JFrame parent, String title, String message) 
        {
            super(parent, title, true);

            if (parent != null) 
            {
                this.setSize(500,150);
                this.setLocation(400,200);
            }

            JPanel messagePane = new JPanel();
            messagePane.add(new JLabel(message));
            getContentPane().add(messagePane, BorderLayout.PAGE_START);

            JPanel buttonPane = new JPanel();
            JPanel button2Pane = new JPanel();

            JButton button = new JButton("OK"); 
            JButton button2 = new JButton("Cancel");

            buttonPane.add(button); 
            button2Pane.add(button2);

            getContentPane().add(buttonPane, BorderLayout.PAGE_END);
            getContentPane().add(button2Pane,BorderLayout.EAST);

            //button.addActionListener(this);
            button.addActionListener(new ActionListener()
            {
                @Override 
                public void actionPerformed( ActionEvent event)
                {
                    parent.dispose();
                }
            });

            button2.addActionListener(new ActionListener()
            {
                @Override 
                public void actionPerformed( ActionEvent event)
                {
                    parent.dispose();
                }
            });

            JPanel textPane = new JPanel();
            JTextField field = new JTextField(30); 
            textPane.add(field);
            getContentPane().add(textPane, BorderLayout.CENTER);

            field.addActionListener(this);


            setDefaultCloseOperation(DISPOSE_ON_CLOSE);

            //pack(); 
            setVisible(true);
}


        public void b ()
        {
            a = field.getText();
        }

        public String g ()
        {
            System.out.println("wasdfsdf" + a);
            return a;
        }

        @Override
        public void actionPerformed(ActionEvent event) 
        {
            a = field.getText();
            System.out.println("wasdfsdfsafddsfsdfsdfsafdsggsdfsdf" + a);
            // TODO Auto-generated method stub

        }

    }
  • 0
    Какой у Вас вопрос? Это как получить значение формы JTextField?
Показать ещё 2 комментария
Теги:
user-interface
swing
jtextfield

2 ответа

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

Вы создаете немодальный JFrame, когда вы действительно хотите использовать модальный JDialog. Измените MyFrame2 на модальный JDialog, и ваши проблемы будут решены.

Подробная информация о том, почему:

  • Когда вы создаете и показываете немодальный JFrame, поток программы немедленно продолжается в вызывающем коде ниже кода, где вы показываете JFrame.
  • Это означает, что вы попытаетесь извлечь данные из JTextField, прежде чем пользователь сможет добавить к нему информацию.
  • С другой стороны, с помощью модального JDialog поток кода немедленно останавливается в вызывающем коде, когда вы показываете JDialog, и он не возобновляется до тех пор, пока JDialog больше не будет виден.
  • Таким образом, код ниже, где вы показываете диалог, не будет вызываться до тех пор, пока диалог не будет обработан пользователем, и теперь, надеюсь, JTextField в диалоговом окне будет содержать полезную информацию.

редактировать
Я удивлен, что это даже скомпилирует:

many = Integer.parseInt()

Вы ничего не разбираете на этой линии, и это не будет летать.

Вы хотели бы предоставить MyFrame2 публичный метод, который извлекает String из JTextField, а затем вызывает метод после его отображения. Что-то вроде:

public String getMyTextFieldText() {
    return myTextField.getText();
}

А затем в вызывающем коде:

MyFrame2 myFrame2 = new MyFrame2();
myFrame2.setVisible(true);

String text = myFrame2.getMyTextFieldText();
if (text != null && !text.trim().isEmpty()) {
  int someNumber = Integer.parseInt(text);
}
  • 0
    извините, строка [many = Integer.parseInt (name);] должна была быть написана так. Я новичок в Java и не очень понимаю многие классы графического интерфейса и как их использовать. Я подозревал, что это тот случай, когда я получаю сообщение об ошибке при попытке получить входные данные из Jtextfield. Я попытался использовать функцию get, чтобы увидеть, смогу ли я вернуть текст, но это не сработало. Как мне сделать мой Jdialog модальным, потому что я думаю, что это лучшее решение?
  • 0
    @rominesvn: API JDialog покажет вам доступные конструкторы, которые могут создать модальный JDialog. Я обычно использую конструктор, который принимает JFrame (собственно Window), String и ModalityType в этом порядке.
0

в то время как модальность помогла предотвратить появление диалогов одновременно, однако это не решило мою проблему, я должен был добавить следующие строки, чтобы убедиться, что он сделал то, что я хотел:

public void actionPerformed(ActionEvent event) 
    {
        setTexts(field.getText());
    }

    public String getTexts() {
        return texts;
    }

    public void setTexts(String text) {
        this.texts = text;
    }

Ещё вопросы

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