Java .setText方法只能工作一次

时间:2016-08-12 05:04:03

标签: java swing user-interface jframe textfield

在我的GUI方法中,我有两个使用Java JFrame类的textField。一个textField将文本发送到服务器(此函数根据需要工作)和一个textField,它从服务器接收数据并将其打印到GUI。

我正在使用textField.setText(ServerString)方法将文本设置为textField,但.setText方法仅在服务器上的命令启动GUI时才从字符串中获取文本然后再也不要在textField上设置文本。

我已经验证了每次输入内容时服务器都会对变量ServerString进行实时更新,但它仍然不会将文本设置为textField。一旦启动它,我已经验证了该方法正在被调用,并且.setText()在首次启动后无效。我已经尝试了从try-catch语句到将文本设置为空白(这些都没有用)的所有内容。

我有什么遗漏或某些我没有打电话的功能或我应该使用的其他功能吗?

只是一个代码示例,以便您了解我正在使用的库和内容

这是我的GUI代码,可用于重新创建问题

package Encrypter.src;
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import net.dv8tion.jda.events.message.MessageReceivedEvent;

import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.JTextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.IOException;
import javax.swing.JTextPane;
import javax.swing.event.AncestorListener;
import javax.swing.event.AncestorEvent;

public class TalkGUI extends JFrame {
    JTextPane textPane = new JTextPane();
    private JPanel contentPane;
    private JTextField textField;
    private JTextField textField2;
    //JTextPane textPane = new JTextPane();
    /**
     * Launch the application.
     */
    public static void GUI() {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TalkGUI frame = new TalkGUI();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public TalkGUI() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 647, 448);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        textField = new JTextField();
        textField.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                int key = e.getKeyCode();
                 if (key == KeyEvent.VK_ENTER) {
                     System.out.println("ENTER pressed");


                     if(textField.getText().length() > 0)
                     {
                     }

                     //textField.setText("test");
                     //System.out.println(textField.getText());


                 }
            }
        });

        textField.setBounds(10, 77, 292, 321);
        contentPane.add(textField);
        textField.setColumns(10);

        JLabel lblHd = new JLabel("Input to Server");
        lblHd.setBounds(86, 34, 108, 32);
        contentPane.add(lblHd);

        JLabel lblOutputFromServer = new JLabel("Output From Server");
        lblOutputFromServer.setBounds(388, 43, 174, 14);
        contentPane.add(lblOutputFromServer);

        textField2 = new JTextField();
        textField2.setBounds(328, 77, 293, 321);
        contentPane.add(textField2);
        textField2.setColumns(10);

    /*
        textPane.setBounds(312, 77, 309, 321);
        textPane.setEditable(false);
        textPane.setText("you cant edit this paneen");
        contentPane.add(textPane);
        */
    }

    public void set(String string)
    {
        System.out.println(string + " ok");
        textField2.setText(string);
    }


}

1 个答案:

答案 0 :(得分:0)

您可以根据需要多次设置文本。你只需在你的代码中加入一个逻辑,每当你的服务器字符串被修改时,你只需要调用setTest()方法,即:textField2.setText(ServerString);