【发布时间】:2015-03-11 12:39:24
【问题描述】:
我的问题如下:
在我的应用程序中,用户单击一个按钮会弹出一个对话框(自定义 jOptionPane)。此对话框包含一个 JTextArea,用户将在其中键入响应,然后由应用程序处理,但是我希望这个 JTextArea(它将保存用户的输入并且当前包含示例文本,例如“在此处写下您的答案”)自动突出显示。
我可以通过在 JTextArea 上调用 requestFocusInWindow() 然后调用 selectAll() 来正常执行此操作,但是当使用 JOptionPane 完成此操作时似乎存在问题,我猜这与焦点有关无法成功转移到 JTextArea。
我已经制作了一个 SSCCE 来清楚地证明这一点,并希望得到你们中的一个关于我如何使这成为可能的答案。提前致谢!
1/2 类:主要
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Main extends JFrame{
public static void main(String[] args) {
Main main = new Main();
main.go();
}
private void go() {
JPanel background = new JPanel();
JPanel mainPanel = new ExtraPanel();
((ExtraPanel) mainPanel).setupPanel();
JButton testButton = new JButton("Test the jOptionPane");
testButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
optionPaneTest();
}
});
background.add(mainPanel);
background.add(testButton);
getContentPane().add(background);
pack();
setVisible(true);
}
private void optionPaneTest() {
JPanel testPanel = new ExtraPanel();
((ExtraPanel) testPanel).setupPanel();
int result = JOptionPane.showConfirmDialog(null, testPanel,
"This is a test", JOptionPane.OK_CANCEL_OPTION);
}
}
----------------------------------- ------------------------------
2/2 类:ExtraPanel
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class ExtraPanel extends JPanel{
public void setupPanel() {
JTextArea textArea = new JTextArea();
textArea.setText("Write your response here");
textArea.requestFocusInWindow();
textArea.selectAll();
add(textArea);
}
}
【问题讨论】:
-
Dialog focus 文章恰好涵盖了这一需求..
-
我认为问题在于您在将
JTextArea中的所有文本添加到选项面板之前将其聚焦并选择了它 -
@Andrew Thompson add(textArea);在 JOptionPane 中??? :-)
-
我编辑了我的答案以使用 AncestorListener。这种方法的额外好处是用户可以立即开始在 TextArea 中输入。
标签: java swing user-interface jtextarea joptionpane