【问题标题】:Insert text to selected JTextfield using JButtons使用 JButton 将文本插入到选定的 JTextfield
【发布时间】:2012-10-10 10:31:46
【问题描述】:

我有多个文本字段和按钮

选择文本字段后,按下按钮时应添加文本。

这就是我的尝试

import javax.swing.text.JTextComponent;
    private void num9ActionPerformed(java.awt.event.ActionEvent evt) {                                            
            JTextComponent component = getFocuedComponent();
            component.setText( component.getText() + "9" );

    }

但这对我不起作用。

附言。正在尝试制作矩阵计算器。

编辑: 供参考... 这就是我实现它的方式......在SJuan76的回答之后......谢谢!

private JTextComponent selectedTextField;

// TextFields onFocus event
    private void a33FocusGained(java.awt.event.FocusEvent evt) {
        selectedTextField = (JTextComponent) evt.getSource();
    }
// action for button
        private void num9ActionPerformed(java.awt.event.ActionEvent evt) {                                            
                selectedTextField.setText( selectedTextField.getText() + "9" );

        }

【问题讨论】:

    标签: java swing jbutton jtextfield


    【解决方案1】:

    你没有具体说明问题,所以我会猜测一下。如果您想要更好的答案,请提出更好的问题。

    当您点击按钮时,输入文本的焦点已经丢失(转移到该按钮)。

    向更新共享变量的文本字段添加一个侦听器,指向最后选择的输出文本。当您处理 actionevent 时,更新该组件。

    当然,当共享变量不再有意义时,还有重置共享变量的问题。

    更新:我认为getFocusedComponent() 是 API 的一部分,但我找不到任何对它的引用,如果你想要一个好的答案,你应该发布更多代码。

    【讨论】:

    • 我理解失去焦点的事情,但你能用一些代码解释一下接下来的两行吗......不胜感激......
    • 我发现我的错误... getFocuedComponent() 不是任何方法... 我在问有没有这样的方法... 我理解这两行... 谢谢您的回答。 .
    【解决方案2】:

    您需要将选定的 JTextComponent 作为类成员。如果您将所选组件保存在局部变量中(我认为您正在这样做),它不会记住所选组件。一个粗略的例子:

    public class YourClass  implements ActionListener
    {
       private JTextComponent selectedTextField ; 
        ....
       void OnComponentSelected()
       {
         //init selectedTextField
       }
       void actionPerformed() 
       {
          //   selectedTextField.setText(...);
       }
    }
    

    【讨论】:

    • 方法中没有创建JTextComponent,它不是局部变量。
    • 看看他的代码,void num9ActionPerformed.. 对我来说似乎是一种方法。
    • 为什么你认为getFocusedComponent() 正在创建一个新对象?逻辑是它正在返回对容器中已经存在的组件的引用...
    • 我在哪里说他在“创建一个新对象”。我说他没有将所选组件保存在班级成员中。当该方法运行完成时,所选组件将被遗忘。
    【解决方案3】:

    您可以记住上次选择的JTextComponent,然后在按下某个按钮后更改其文本。所以你不依赖于专注的组件。您可以通过监听鼠标事件来记住它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 2021-02-16
      • 2021-06-24
      • 2021-02-02
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多