【发布时间】:2016-08-12 05:04:02
【问题描述】:
在我的 GUI 方法中,我有两个使用 Java JFrame 类的文本字段。一个 textField 向服务器发送文本(此功能根据需要工作),一个 textField 从服务器接收数据并将其打印到 GUI。
我正在使用textField.setText(ServerString) 方法将我的文本设置为文本字段,但.setText 方法只会在通过服务器上的命令启动 GUI 时从字符串中获取文本一次,然后从不设置再次在 textField 上的文本。
我已经验证变量ServerString 在每次输入内容时都会被服务器实时更新,但它仍然不会将文本设置为文本字段。一旦它启动,我已经验证了该方法正在被调用并且.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);
}
}
【问题讨论】:
-
这很可能是您的代码中的问题。您能否提供您拥有的详细代码。
-
你在重新加载页面吗?
-
谢谢你告诉我...我忘了。我刚刚提供了我的 GUI 代码,不包括一些服务器端的东西。
-
1) Java GUI 必须在不同的操作系统、屏幕尺寸、屏幕分辨率等上使用不同语言环境中的不同 PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或combinations of them 以及white space 的布局填充和边框。 2) 不要阻塞 EDT(事件调度线程)。发生这种情况时,GUI 将“冻结”。有关详细信息和修复,请参阅 Concurrency in Swing。
标签: java swing user-interface jframe textfield