使用TextField转换Java程序以摆动JTextField

时间:2012-06-13 11:05:07

标签: java swing awt

这段代码是我要转换为swing的程序的简化版本(使用JTextFieldDocumentListener)。我已经阅读了一些教程,但我不能这样做...... 我不应该使用全局变量,我必须使用getSource()(在这种情况下为getDocument()?),因为在原始程序中,JTextField的数量是可变的(它们是在{{内部生成的) 1}},所以他们没有“名字”)。此数字取决于文本文件中写入的值。

for

1 个答案:

答案 0 :(得分:4)

这是您发布到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更多的处理文本更改事件的控件,但我选择使用一种方法处理它们,以便与示例的功能完全匹配