在文本字段中输入然后将其附加到文本区域得到奇怪的输出-GUI JAVA
Typing into a text field then appending it to the text area getting weird output-GUI JAVA
所以我正在尝试实现一个简单的 GUI 程序,用户在该程序中输入文本字段,然后当他按下回车键时,文本将附加到文本字段,但我得到的是这种输出:
这是我的代码:
TextField.java:
package activity1;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JOptionPane;
import java.awt.FlowLayout;
public class TextField extends JFrame{
private JTextField text;
private JTextArea textArea;
public TextField()
{
super("Activity 1");
setLayout(new FlowLayout());
text = new JTextField(20);
add(text);
textArea = new JTextArea(5,20);
textArea.setEditable(false);
add(textArea);
TextFieldHandler handler = new TextFieldHandler();
text.addActionListener(handler);
}
private class TextFieldHandler implements ActionListener{
public void actionPerformed(ActionEvent event)
{
String line = text.getText();
textArea.append(text + "\n");
//text.setText("");
}
}
}
我的主要 TextFieldTEST.java:
package activity1;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class TextFieldTEST {
public static void main(String[] args) {
TextField myFrame = new TextField();
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setSize(300,200);
myFrame.setVisible(true);
}
}
请帮忙。
您附加的是 JTextField 而不是其内容,因此您看到的是对此 JTextField 对象调用 toString()
的结果。修复小而简单:
变化:
String line = text.getText();
textArea.append(text + "\n"); // don't use text here
至:
String line = text.getText();
textArea.append(line + "\n"); // notice the difference? using line here
附带建议:
- 将您的 JTextArea 放入 JScrollPane 并将 that 添加到 GUI。
- 不要设置组件的大小。而是
pack()
您的 GUI,让布局管理器和组件自行调整大小。
- 例如,我会使用 BorderLayout(这是 JFrame 的 contentPane 的默认设置),然后添加 JTextField BorderLayout.PAGE_START 和包含 JTextArea BorderLayout.CENTER 的 JScrollPane。
所以我正在尝试实现一个简单的 GUI 程序,用户在该程序中输入文本字段,然后当他按下回车键时,文本将附加到文本字段,但我得到的是这种输出:
这是我的代码:
TextField.java:
package activity1;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JOptionPane;
import java.awt.FlowLayout;
public class TextField extends JFrame{
private JTextField text;
private JTextArea textArea;
public TextField()
{
super("Activity 1");
setLayout(new FlowLayout());
text = new JTextField(20);
add(text);
textArea = new JTextArea(5,20);
textArea.setEditable(false);
add(textArea);
TextFieldHandler handler = new TextFieldHandler();
text.addActionListener(handler);
}
private class TextFieldHandler implements ActionListener{
public void actionPerformed(ActionEvent event)
{
String line = text.getText();
textArea.append(text + "\n");
//text.setText("");
}
}
}
我的主要 TextFieldTEST.java:
package activity1;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class TextFieldTEST {
public static void main(String[] args) {
TextField myFrame = new TextField();
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setSize(300,200);
myFrame.setVisible(true);
}
}
请帮忙。
您附加的是 JTextField 而不是其内容,因此您看到的是对此 JTextField 对象调用 toString()
的结果。修复小而简单:
变化:
String line = text.getText();
textArea.append(text + "\n"); // don't use text here
至:
String line = text.getText();
textArea.append(line + "\n"); // notice the difference? using line here
附带建议:
- 将您的 JTextArea 放入 JScrollPane 并将 that 添加到 GUI。
- 不要设置组件的大小。而是
pack()
您的 GUI,让布局管理器和组件自行调整大小。 - 例如,我会使用 BorderLayout(这是 JFrame 的 contentPane 的默认设置),然后添加 JTextField BorderLayout.PAGE_START 和包含 JTextArea BorderLayout.CENTER 的 JScrollPane。