簡體   English   中英

從JTextfield獲取輸入

[英]Get input from JTextfield

我能夠使代碼執行我想要的操作,但事實是我現在無法從中獲取輸入。 我現在想做的仍然是從JTextfield獲取文本,並將其返回給創建框架對象的main方法。 有人可以幫我從以下代碼中獲取輸入嗎?

 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

        }

    }

當您真正想使用模式JDialog時,您正在創建非模式JFrame。 將MyFrame2更改為模式JDialog,即可解決問題。

有關原因的詳細信息:

  • 當創建並顯示非模式JFrame時,程序流程將立即在顯示JFrame的代碼下方的調用代碼中繼續。
  • 這意味着您將在用戶沒有機會向其添加信息之前嘗試從JTextField提取數據。
  • 另一方面,使用模式JDialog時,在顯示JDialog時,代碼流立即停止在調用代碼中,並且直到JDialog不再可見時它才恢復。
  • 因此,顯示對話框的下面的代碼只有在用戶處理完對話框后才會被調用,現在希望對話框中的JTextField會包含有用的信息。

編輯
我很驚訝它甚至可以編譯:

many = Integer.parseInt()

您在此行上沒有進行任何解析,並且不會運行。

您可能想給MyFrame2一個公共方法,該方法從其JTextField中提取String,然后在顯示它之后調用該方法。 就像是:

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);
}

雖然模態確實有助於防止對話框同時出現,但是這並不能解決我的問題,因此我不得不添加以下幾行以確保其符合我的要求:

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

    public String getTexts() {
        return texts;
    }

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM