swing中的按钮、菜单这类组件的状态同步的问题。

snailmmx 2004-08-11 01:52:00
写程序时常常遇到这样的问题:菜单中的一个CheckBoxItem,在工具栏上也有一个对应的CheckBoxButton,这两个东西做的是同一件事,而它们的状态也要求同步,一个被check了,另一个也要被check。以前用MFC,常常是在程序内部设一个标志变量记录当前程序所处的操作状态,再在菜单或按钮的updateUI事件中来检查标志量再设置自己的checked状态。现在到了java里,由于编程模型不同,只好在listener中对这两个组件分别执行一次相应操作,觉得不是很习惯,不知是不是还有其它更加简洁的方法来实现这样的要求?
...全文
265 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomcatjava 2004-08-11
  • 打赏
  • 举报
回复
另外添加给工具栏Action:
private JButton addButtonItem( JToolBar toolBar,Action action ) {
JButton item = toolBar.add( action );
item.setText( "" );
return item;
}

如需要改变组件状态,只需改变Action的setEnabled()即可!
tomcatjava 2004-08-11
  • 打赏
  • 举报
回复
扩展AbstractAction,如下:
class ShareAction extends AbstractAction {

ShareAction( String name ){
super( name );
}

ShareAction( String name,KeyStroke keystroke ) {
this( name );
if( keystroke != null ) {
putValue( ACCELERATOR_KEY,keystroke );
}
}

ShareAction( String name,Icon icon ) {
super( name,icon );
if( icon != null ){
putValue( SMALL_ICON,icon );
}
}

ShareAction( String name,KeyStroke keystroke,Icon icon ) {
this( name,icon );
if( keystroke != null ){
putValue( ACCELERATOR_KEY,keystroke );
}
}

public void actionPerformed( ActionEvent e ) {

if( getValue(Action.NAME).equals("关闭") ) {
setVisible( false );
}
else if( getValue(Action.NAME).equals("打开") ) {
addFromFile();
return;
}
else if( getValue(Action.NAME).equals( "保存" ) ) {
save();
return;
}
else if( getValue(Action.NAME).equals("另存为...") ) {
saveas();
return;
}
else if( getValue(Action.NAME).equals("关于") ) {
displayAbout();
return;
}
}
}
然后:
private JMenuItem addMenuItem( JMenu menu,Action action ) {
JMenuItem item = menu.add( action );
KeyStroke keystroke = (KeyStroke)action.getValue( action.ACCELERATOR_KEY );
if( keystroke != null ){
item.setAccelerator( keystroke );
}
return item;
}
JButton亦可添加Action,这样就可以共享同一个Action了!
射天狼 2004-08-11
  • 打赏
  • 举报
回复
设置监听,一个改变的时候, 通过代码改变另一个!!
wangyanqiu 2004-08-11
  • 打赏
  • 举报
回复


只好在listener中对这两个组件分别执行一次相应操作

这就够了吧,以前都是这么用的
minghuitian 2004-08-11
  • 打赏
  • 举报
回复
up
ukulele8656 2004-08-11
  • 打赏
  • 举报
回复
学习

62,622

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧