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

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

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

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

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

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

【问题讨论】:

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

标签: java swing jtextfield settext windowlistener


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 2010-11-22
      相关资源
      最近更新 更多