【发布时间】:2011-06-25 14:31:52
【问题描述】:
我想将焦点设置在作为对象消息传递给 JOptionPane 的特定 JTextField 上。这是我的代码(我希望将焦点放在 txt2 上,但焦点始终放在 txt1 上):
import java.awt.*;
import java.util.*;
import javax.swing.*;
public class TextArea extends JPanel
{
private JTextArea txt1 = new JTextArea();
private JTextArea txt2 = new JTextArea();
public TextArea()
{
setLayout(null);
setPreferredSize(new Dimension(200,100));
txt1.setBounds (20, 20, 220, 20);
txt2.setBounds (20, 45, 220, 20);
txt1.setText("Text Field #1");
txt2.setText("Text Field #2");
add(txt1);
add(txt2);
txt2.requestFocus();
}
private void display()
{
Object[] options = {this};
JOptionPane pane = new JOptionPane();
pane.showOptionDialog(null, null, "Title", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, txt2);
}
public static void main(String[] args)
{
new TextArea().display();
}
}
【问题讨论】:
-
我没有见过这种类型的 JOptionPane 以这种方式使用,我不确定它是否是正确的方法。为什么不使用 JDialog?
-
这种方法没有错。它通过完全创建自定义对话框来节省重新发明轮子。您需要做的就是创建自定义面板。
-
@camickr:Rob,我不同意,因为如果你仔细查看他的代码,他将他的 JPanel 添加到对象中似乎 非常 奇怪(至少对我来说) [] JOptionPane showOptionDialog方法的options变量(第7个参数),没有放入Object变量(第2个变量)。你以前这样做过吗?我知道我没有。
-
@Eng Fouad,我很失望你根据发布的代码采取了解决方案。它表明您只是复制解决方案,而不是花时间了解给出的其他解决方案。我为您提供了一个简单的单行解决方案,您无需对组件进行子类化即可使用该解决方案。可重复使用的解决方案通常比定制解决方案更受欢迎。您不是通过复制解决方案来学习,而是通过理解给出的建议来学习。
-
@Hovercraft & @camickr:对不起,我只关心如何将焦点放在某些 JTextField 上,我很快就写了这个(SSCCE)
标签: java swing jtextfield setfocus