Есть ли что-то, что уже встроено в Swing и позволяет получить дескриптор последнего текстового компонента, на котором был фокус?
Вы создаете действие, расширяющее TextAction.Класс TextAction имеет метод, который позволяет вам получить последний текстовый компонент с фокусом.
Редактировать:
Вы можете создать свое собственное действие и делать все, что захотите.Действие может быть добавлено к любому JMenuItem или JButton.Например:
class SelectAll extends TextAction
{
public SelectAll()
{
super("Select All");
}
public void actionPerformed(ActionEvent e)
{
JTextComponent component = getFocusedComponent();
component.selectAll();
}
}
Если вы просто хотите вставить символ в позицию курсора текстового поля, вы, вероятно, можете просто сделать
component.replaceSelection(...);
Редактировать 2:
Я не понимаю, в чем путаница с этим ответом.Вот простой пример:
- выделите какой-нибудь текст
- с помощью мыши нажмите на флажок
- на вкладке или с помощью мыши нажмите на «Вырезать»"button
Не имеет значения, что текстовое поле в данный момент не имеет фокуса, когда вызывается действие.TextAction отслеживает последний текстовый компонент, который имел фокус.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
public class TextActionTest extends JFrame
{
JTextField textField = new JTextField("Select Me");
JTabbedPane tabbedPane;
public TextActionTest()
{
add(textField, BorderLayout.NORTH);
add(new JCheckBox("Click Me!"));
add(new JButton(new CutAction()), BorderLayout.SOUTH);
}
public static void main(String[] args)
{
TextActionTest frame = new TextActionTest();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible(true);
}
class CutAction extends TextAction
{
public CutAction()
{
super("Click to Cut Text");
}
public void actionPerformed(ActionEvent e)
{
JTextComponent component = getFocusedComponent();
// JTextComponent component = getTextComponent(e);
component.cut();
}
}
}