在Swing UI界面定义默认获得焦点的组件

在Swing应用程序中,让特定组件在启动时自动获取焦点需要理解Swing的焦点机制。默认情况下,最早添加到窗口的可聚焦组件会获取焦点。然而,直接在组件创建后调用`requestFocus()`无效,因为焦点设置发生在窗体显示的最后时刻。解决方法是在窗体添加`WindowListener`,并在`windowOpened`事件中调用`requestFocus()`。在NetBeans IDE中,这可以通过事件编辑器轻松实现,只需为窗体添加`windowOpened`事件并编写相应代码。
摘要由CSDN通过智能技术生成
[size=medium]最近写了个小的UI界面的程序.程序运行后,为方便使用,应该自动把焦点定位在负责主要工作的部件上,但如何实现这个简单的功能,还着实让我这类出学者查了些资料.

首先说一下swing中组件默认获得焦点的机制.在swing的窗体中,先被添加进来的组件,如果可以获得焦点,则会优先获得焦点.这是它的默认规则.但我们可以通过组件调用其自身的requestFocus()方法,来强制某组件优先获得焦点.

但这里有一个隐含的问题,那就是直接让这个组件在创建后,就调用requestFocus()是没有任何作用的!!!因为swing中,对焦点的设置是在窗体初始化并显示前最后一刻才执行的,你如果在组件中直接调用requestFocus(),虽然代码也执行了,但却是在设置焦点操作之前执行的,那也自然就无效了.而我们知道了这一点,就好说了,把调用requestFoucs()方法的代码加入的合适的地方不就ok了吗?那么哪里是这个地方呢,那就是给窗体JFrame增加WindowListener事件监听器,然后把对组件requestFocus()方法的调用放在windowOpened(java.awt.event.WindowEvent evt)事件中就可以了.也就是说在打开窗体的时候执行我们的焦点定义代码.这个时候正好是swing设置焦点的刹那!我们的代码也如愿发挥了功效.

例如我要让我的一个JTextArea theText默认获得焦点,就可以写如下代码片段:

addWindowListener(new java.awt.event.WindowAdapter() {
public void windowOpened(java.awt.event.WindowEvent evt) {
focusEvt(evt);
}
});
//定义窗体打开时的默认获得焦点的组件
private void focusEvt(java.awt.event.WindowEvent evt) {
theText.requestFocus();
}

其实上面的操作,如果在netBeans中来完成,就太简单了.只需要选择JFrame窗体组件,在属性面板的事件中,选择添加一个windowOpened事件,把theText.requestFocus();写在事件代码中就ok了,呵呵,这也正是我十分喜欢netbeans的原因,太方便了.好了,不罗嗦了,相信大家都明白了,如果有和我一样的朋友,希望这篇文章可以节省您的时间去四处搜索资料.[/size]
2006-11-19 12:36
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值