我有一个带有多个 JTabbedPane
的 swing GUI;每个选项卡在顶部包含两个 JButtons
,然后是一个 JTextArea
(用于用户输入),在底部包含一个用于结果的 JTextField
。
我的问题是,在切换选项卡后,如果不使用鼠标单击它或使用键盘上的 Tab 键,我无法让 JTextArea
获得焦点?
我有...
frame.addWindowFocusListener(new WindowAdapter() {
public void windowGainedFocus(WindowEvent e) {
textArea_1.requestFocusInWindow();
...这在应用程序首次运行时效果很好(第一个选项卡中的 textArea 具有焦点)但是当我切换到另一个选项卡 Pane 时,第一个按钮现在具有焦点而不是 textArea,并且当我切换回来时到第一个选项卡,textArea 失去焦点,第一个按钮再次获得焦点。
我试过向每个 textArea 添加一个 requestFocus,我试过在每个 textArea 上“置于最前面”,我也搞砸了 Focus Traversal,但我似乎没有做任何事情让 textArea 获得焦点选项卡更改?
这让我难住了一个星期,所以如果能提供任何帮助,我们将不胜感激?
最佳答案
将 ChangeListener 添加到您的 JTabbedPane。这是总体思路:
[抱歉,我使用 JTextFields 而不是 JTextAreas,因为我有一个旧的 stub - 但想法是一样的。]
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class JTabbedPaneDemo3 implements Runnable
{
JTextField txtFoo;
JTextField txtBar;
JTabbedPane tabbedPane;
public static void main(String[] args)
{
SwingUtilities.invokeLater(new JTabbedPaneDemo3());
}
public void run()
{
txtFoo = new JTextField(10);
final JPanel pnlFoo = new JPanel();
pnlFoo.add(new JButton("Button 1"));
pnlFoo.add(new JLabel("Foo"));
pnlFoo.add(txtFoo);
txtBar = new JTextField(10);
final JPanel pnlBar = new JPanel();
pnlBar.add(new JButton("Button 3"));
pnlBar.add(new JLabel("Bar"));
pnlBar.add(txtBar);
tabbedPane = new JTabbedPane();
tabbedPane.addTab("Tab 1", pnlFoo);
tabbedPane.addTab("Tab 2", pnlBar);
tabbedPane.addChangeListener(new ChangeListener()
{
public void stateChanged(ChangeEvent e)
{
Component comp = tabbedPane.getSelectedComponent();
if (comp.equals(pnlFoo))
{
txtFoo.requestFocusInWindow();
}
else if (comp.equals(pnlBar))
{
txtBar.requestFocusInWindow();
}
}
});
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(460, 200);
frame.getContentPane().add(tabbedPane, BorderLayout.CENTER);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
txtFoo.requestFocusInWindow();
}
}
关于Java - 在选择新的 JTabbedPane 时如何获得对 JTextArea 的关注,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14265326/