使用JButtons将文本插入选定的JTextfield

时间:2012-10-10 10:31:47

标签: java swing jbutton jtextfield

我有多个文字字段和按钮

Textfields buttons

选择文本字段时,按下按钮时应将文本添加到文本字段中。

这是我尝试的方式

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

    }

但它对我不起作用。

PS。试图制作矩阵计算器。

编辑:供参考...... 这是我如何实现它......在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" );

        }

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

您没有指定问题所以我会猜测。如果你想要一个更好的答案给出一个更好的问题。

当您单击按钮时,inputtext的焦点已经丢失(转移到该按钮)。

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

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

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

答案 2 :(得分:0)

您可以记住上一次选择的JTextComponent并在按下某个按钮后更改其文字。所以你不要依赖专注的组件。你可以通过听老鼠事件来记住它。