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

Posted

技术标签:

【中文标题】创建后如何在 JTextField 中设置新文本?【英文标题】:how to set new text in JTextField after creation? 【发布时间】:2011-09-15 02:24:33 【问题描述】:

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

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

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

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

我对此非常绝望。 谁能给我一个线索? 提前致谢! :)

【问题讨论】:

你确定不是每次都创建一个新框架,而不是让它可见吗? 是的,我确定.. 我保持指向前一帧的指针,只是来回移动 当你让框架可见时,你是不是在使用任何监听器事件,因为当某些操作发生时你让它可见 如果您想在焦点对准文本字段时更改文本。那么你不能这样做 【参考方案1】:

在将框架再次设置为可见之前,应使用新值/状态更新字段。 类似:

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

框架将提出新的值/状态。

【讨论】:

如果您想在焦点对准文本字段时更改文本。那么你不能这样做。【参考方案2】:

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

查看如何Write Window Listeners。

【讨论】:

【参考方案3】:

使用 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

【讨论】:

以上是关于创建后如何在 JTextField 中设置新文本?的主要内容,如果未能解决你的问题,请参考以下文章

单击提交后如何在带有java bean值的JTextField上设置文本

禁用时在某个活动中设置新的ActionBar

如何创建 JTextField 数组并从 String 数组中检索文本?

在 java、dom、xml 解析中设置新节点值的问题

使用 docker 客户端在 python 中设置新容器时权限被拒绝错误

使用 iTextSharp HTMLWorker (html to pdf) 在 HTML 中设置新页面