在我的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);
}
}
2条答案
按热度按时间svgewumm1#
你可以设置文本多次,因为你想要的。你只是把一个逻辑在你的代码,每当你的服务器字符串被修改,然后你只是调用
setTest()
方法,即:textField2.setText(ServerString);
2fjabf4q2#
我的代码有什么问题是常量标签赋值。当我按下一个按钮时,我正在运行以下代码:
第一个月
但是当我只使用setText()时,我的问题就解决了。
你应该分配一次JLabel(和文本域)。希望能对你有所帮助。