如何在创建后在JTextField中设置新文本?

时间:2011-06-14 22:15:40

标签: java swing jtextfield settext windowlistener

我有一个jTextField,当我创建框架时,我将它的值设置为一定的总和。
这是启动代码:

totalTextField.setText(
            itemsPriceTextField.getText() +           
                    Float.toString(orderDetails.delivery)
);

此文本字段应显示用户选择的项目总和 选择在不同的帧上完成,并且两个帧都是可见/不可见的 一次。
用户可以来回移动并添加/删除项目。

现在,每次我再次设置此框架时,我需要将设置的值重新加载到该字段中 (可能没有进行任何更改,但如果是这样,我需要设置新的正确总和)。

我非常绝望 有人可以给我一个线索吗? 提前致谢! :)

3 个答案:

答案 0 :(得分:9)

在再次设置框架可见之前,应该使用新的值/状态更新字段 类似的东西:

jTextField.setText("put your text here");  
jRadioButton.setSelected(!isSelected());  
.  
/* update all you need */
.  
jFrame.setVisible(true);

框架将显示新的值/状态。

答案 1 :(得分:3)

将WindowListener添加到框架中。然后,您可以处理windowActivated事件并重置文本字段的文本。

请参见如何Write Window Listeners

答案 2 :(得分:0)

使用 DocumentListener 触发 JTextField public void setText(String t)

这里有一个 DocumentListener 的例子:

public class SetTextInJTextField extends JFrame implements DocumentListener {

JTextField entry;
JTextField entryToSet = new JTextField();

public SetTextInJTextField() {
    createWindow();
    entry.getDocument().addDocumentListener(this);
}

private void createWindow() {
    JFrame frame = new JFrame("Swing Tester");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    createUI(frame);
    frame.setSize(560, 200);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

private void createUI(final JFrame frame) {
    JPanel panel = new JPanel();
    entry = new JTextField();
    entryToSet = new JTextField();

    LayoutManager layout = new BoxLayout(panel, BoxLayout.PAGE_AXIS);
    panel.setLayout(layout);

    panel.add(this.entry);
    panel.add(entryToSet);
    frame.getContentPane().add(panel, BorderLayout.CENTER);
}

public void setTextInTargetTxtField() {
    String s = entry.getText();
    entryToSet.setText(s);
}

// DocumentListener methods
public void insertUpdate(DocumentEvent ev) {
    setTextInTargetTxtField();
}

public void removeUpdate(DocumentEvent ev) {
    setTextInTargetTxtField();
}

public void changedUpdate(DocumentEvent ev) {
}

public static void main(String args[]) {
    //Schedule a job for the event dispatch thread:
    //creating and showing this application's GUI.
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new SetTextInJTextField().setVisible(true);
        }
    });
  }
}

灵感来自: https://docs.oracle.com/javase/tutorial/displayCode.html?code=https://docs.oracle.com/javase/tutorial/uiswing/examples/components/TextFieldDemoProject/src/components/TextFieldDemo.java


相关课程: https://docs.oracle.com/javase/tutorial/uiswing/components/textfield.html