我有两个问题,请记住我是java的新手 1。 我有一个使用JFrame创建GUI的类。 JFrame有2个面板,我使用JSplitPane
添加问题是我可以设法将焦点设置在所需的JPanel上,但我想将焦点设置在此Panel中的特定JTextField上
这是创建框架的代码
//Create JFrame
JFrame frame = new JFrame("Testing Frames");
frame.setLocation(100,100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p1=new JPanel();
p1.add(new First_Panel());
p1.setBackground(Color.RED);
JPanel p2=new JPanel();
p2.add(new Second_Panel());
p2.setBackground(Color.BLUE);
//Create Split JPanel
JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, p1, p2 );
splitPane.setOneTouchExpandable(true);
splitPane.setDividerSize(20);
//Pack Frame and show
frame.add(splitPane);
frame.setMinimumSize(new Dimension(1500,600));
frame.pack();
p1.requestFocus();
frame.setVisible(true);
2。 我在聚焦的另一个问题,在第一个面板中,我有一个JTextField正在以当前的部分时间开始。 / MM / YYYY 当我浏览JTextfields并到达此特定字段时,它开始在yyyy之后写入, 我如何设置它,当我选中这个JTextField它将从正确的点开始。
提前致谢:D
编辑: 我为其中一个JPanel类添加了代码。
我删除了大部分代码,只留下了与问题相关的部分。
焦点应该放在driver_name JTextField上,而日期JTextFiled是用/ MM / yyyy开始的,并且与第二个问题有关。
public class First_Panel extends JPanel {
//Load Frame Components
JTextField driver_name=new JTextField(10);
JTextField date=new JTextField(10);
public First_Panel() throws ClassNotFoundException, SQLException {
super(new MigLayout("", "[grow][grow][grow][center][grow][grow][grow]", "[][][]"));
//Date Format
DateFormat dateFormat = new SimpleDateFormat("/MM/yyyy");
//Set Date Automatically to Date Field
date.setFont(font);
Calendar cal = Calendar.getInstance();
date.setText(dateFormat.format(cal.getTime()));
//Frame Layout Properties
//Third Column
add(driver_name, "cell 0 2,growx");
driver_name.setColumns(10);
add(date, "cell 2 2,growx");
date.setColumns(10);
send.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
dn=driver_name.getText();
SimpleDateFormat originalFormat = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat targetFormat = new SimpleDateFormat("yyyy/MM/dd");
try {
odate = originalFormat.parse(date.getText());
ndate=(targetFormat.format(odate));
} catch (ParseException ex) {
}
答案 0 :(得分:3)
但我想将重点放在此Panel
中的特定JTextField上
您发布的代码甚至不包含JTextField,因此很难将注意力集中在一个不存在的组件上。当您提出问题后,发布一个显示问题的正确SSCCE。
默认情况下,JPanel无法调焦,因此您应该向可以获得焦点的面板添加组件。
您使用了错误的方法,请阅读以下方法的API:
p1.requestFocus();
使用的正确方法是requestFocusInWindow()
。但是,只能对可见帧上的组件进行聚焦,因此代码的顺序应为:
frame.setVisible(true);
textField.requestFocusInWindow();
以部分当前日期启动的JTextField。 /月/年
您再次谈论这个神秘的文本字段,该字段未出现在您发布的代码中。我的猜测是你没有正确使用布局管理器,你已经错误地设置了文本字段的大小,所以整个文本都没有正确显示。
如果您需要更多帮助,请发布适当的SSCCE
。 SSCCE应该包含在您提出的所有问题中,因为问题始终与您编写的代码有关,如果我们无法看到代码,我们就无法猜测您可能在做什么。