将带有TextField的Java程序转换为swing JTextField
这段代码是我将转换为swing的程序的简化版本(使用将带有TextField的Java程序转换为swing JTextField,java,swing,awt,Java,Swing,Awt,这段代码是我将转换为swing的程序的简化版本(使用JTextField和DocumentListener)。我读过一些教程,但我做不到。。。 我不应该使用全局变量,我必须使用一些类似getSource()(getDocument())的变量,因为在原始程序中,JTextField的数量是可变的(它们是在for中生成的,因此它们没有“名称”)。此数字取决于写入文本文件中的值 import java.awt.*; import java.awt.event.*; class TestWindow
JTextField
和DocumentListener
)。我读过一些教程,但我做不到。。。
我不应该使用全局变量,我必须使用一些类似getSource()
(getDocument()
)的变量,因为在原始程序中,JTextField的数量是可变的(它们是在for
中生成的,因此它们没有“名称”)。此数字取决于写入文本文件中的值
import java.awt.*;
import java.awt.event.*;
class TestWindow extends Frame {
public TestWindow() {
Panel p = new Panel(new FlowLayout());
Label l = new Label("Temp");
TextField tf1 = new TextField();
TextField tf2 = new TextField();
tf1.addTextListener(new myTextListener(l));
tf2.addTextListener(new myTextListener(l));
p.add(tf1);
p.add(tf2);
tf1.setColumns(10);
tf2.setColumns(10);
p.add(l);
add(p);
pack();
setVisible(true);
}
class myTextListener implements TextListener {
Label input;
myTextListener(Label input) {
this.input = input;
}
public void textValueChanged(TextEvent e) {
input.setText(((TextField)(e.getSource())).getText());
}
}
}
public class Test {
public static void main(String[] args) {
new TestWindow();
}
}
这是您发布到Swing的代码的直接转换,该代码执行完全相同的任务:
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import java.awt.FlowLayout;
public class TestWindow extends JFrame {
public TestWindow() {
JPanel p = new JPanel(new FlowLayout());
JLabel l = new JLabel("Temp");
JTextField tf1 = new JTextField(10);
JTextField tf2 = new JTextField(10);
tf1.getDocument().addDocumentListener(new MyDocumentListener(l));
tf2.getDocument().addDocumentListener(new MyDocumentListener(l));
p.add(tf1);
p.add(tf2);
p.add(l);
add(p);
pack();
setVisible(true);
}
class MyDocumentListener implements DocumentListener{
private JLabel label;
MyDocumentListener(JLabel label) {
this.label = label;
}
@Override
public void insertUpdate(DocumentEvent e) {
handleTextChange(e);
}
@Override
public void removeUpdate(DocumentEvent e) {
handleTextChange(e);
}
@Override
public void changedUpdate(DocumentEvent e) {
handleTextChange(e);
}
private void handleTextChange(DocumentEvent e) {
try {
label.setText(e.getDocument().getText(0,e.getDocument().getLength()));
} catch (BadLocationException ignored) {
//todo: handle exception properly although this should never happen
}
}
}
public static void main(String[] args) {
new TestWindow();
}
}
请注意,DocumentListener为处理文本更改事件提供了比TextListener更多的控制,但我选择使用一种方法来处理它们,以便与示例的功能完全匹配这是您发布到Swing的代码的直接转换,它执行完全相同的任务:
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import java.awt.FlowLayout;
public class TestWindow extends JFrame {
public TestWindow() {
JPanel p = new JPanel(new FlowLayout());
JLabel l = new JLabel("Temp");
JTextField tf1 = new JTextField(10);
JTextField tf2 = new JTextField(10);
tf1.getDocument().addDocumentListener(new MyDocumentListener(l));
tf2.getDocument().addDocumentListener(new MyDocumentListener(l));
p.add(tf1);
p.add(tf2);
p.add(l);
add(p);
pack();
setVisible(true);
}
class MyDocumentListener implements DocumentListener{
private JLabel label;
MyDocumentListener(JLabel label) {
this.label = label;
}
@Override
public void insertUpdate(DocumentEvent e) {
handleTextChange(e);
}
@Override
public void removeUpdate(DocumentEvent e) {
handleTextChange(e);
}
@Override
public void changedUpdate(DocumentEvent e) {
handleTextChange(e);
}
private void handleTextChange(DocumentEvent e) {
try {
label.setText(e.getDocument().getText(0,e.getDocument().getLength()));
} catch (BadLocationException ignored) {
//todo: handle exception properly although this should never happen
}
}
}
public static void main(String[] args) {
new TestWindow();
}
}
请注意,DocumentListener为处理文本更改事件提供了比TextListener更多的控制,但我选择用一个方法来处理它们,以便与示例的功能完全匹配。@xonya:See另请参见。@xonya:See另请参见。