Oriented component reference

I am working on a simple Java swing. How can I get and set the text of the current focused text field / text area of ​​the form?

I know how to determine which component has focus, but I cannot figure out how I can get the selected text of the component. I use getFocusOwner (), but it returns a component and therefore does not implement the getSelectedText () method. Should I ever make a type?

+2
source share
3 answers

Depending on your exact context, you can use a custom TextAction: its getTextComponent(ActionEvent) method returns the most recent focused text component. Code snippet:

  Action logSelected = new TextAction("log selected") { @Override public void actionPerformed(ActionEvent e) { JTextComponent text = getTextComponent(e); System.out.println("selected: " + text.getSelectedText()); } }; JComponent content = new JPanel(); content.add(new JTextField("sometext", 20)); content.add(new JTextField("other content", 20)); content.add(new JCheckBox("just some focusable comp")); content.add(new JButton(logSelected)); 
+3
source

Yes:

 Component focusOwner = ... if(focusOwner instanceof JTextComponent) { // a textfield or textarea is focused JTextComponent textComp = (JTextComponent) focusOwner; String s = textComp.getText(); } 
+3
source

I use getFocusOwner (), but it returns a component and therefore does not implement the getSelectedText () method. Should I ever make a type?

one way is testing for instanceof @ user1235867 +1

the other and most efficient way to use J/Components helt arrays and just determine which of the J/Component currents is KeyboardFocusManager#getFocusOwner() in Window

FocusOwner betweens two switch notification top-level containers are fairly asynchronous and are required to transfer events to invokeLater

 import javax.swing.*; import java.awt.*; import java.awt.event.*; //http://www.coderanch.com/t/342205/GUI/java/Tab-order-swing-components public class Testing { private static final long serialVersionUID = 1L; private Component[] focusList; private int focusNumber = 0; private JFrame frame; public Testing() { JTextField tf1 = new JTextField(5); JTextField tf2 = new JTextField(5); JTextField tf3 = new JTextField(5); JButton b1 = new JButton("B1"); JButton b2 = new JButton("B2"); tf2.setEnabled(false); focusList = new Component[]{tf1, b1, tf2, b2, tf3}; JPanel panel = new JPanel(new GridLayout(5, 1)); panel.add(tf1); panel.add(b1); panel.add(tf2); panel.add(b2); panel.add(tf3); frame = new JFrame(); frame.setFocusTraversalPolicy(new MyFocusTraversalPolicy()); frame.add(panel); frame.pack(); frame.setLocation(150, 100); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() { public boolean dispatchKeyEvent(KeyEvent ke) { if (ke.getID() == KeyEvent.KEY_PRESSED) { if (ke.getKeyCode() == KeyEvent.VK_TAB) { Component comp = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); if (comp.isEnabled() == false) { if (ke.isShiftDown()) { KeyboardFocusManager.getCurrentKeyboardFocusManager().focusPreviousComponent(); } else { KeyboardFocusManager.getCurrentKeyboardFocusManager().focusNextComponent(); } } } } return false; } }); } private class MyFocusTraversalPolicy extends FocusTraversalPolicy { public Component getComponentAfter(Container focusCycleRoot, Component aComponent) { focusNumber = (focusNumber + 1) % focusList.length; return focusList[focusNumber]; } public Component getComponentBefore(Container focusCycleRoot, Component aComponent) { focusNumber = (focusList.length + focusNumber - 1) % focusList.length; return focusList[focusNumber]; } public Component getDefaultComponent(Container focusCycleRoot) { return focusList[0]; } public Component getLastComponent(Container focusCycleRoot) { return focusList[focusList.length - 1]; } public Component getFirstComponent(Container focusCycleRoot) { return focusList[0]; } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { Testing testing = new Testing(); } }); } } 
+2
source

All Articles