我有MyTable,它是JXTable的扩展
public class MyTable extends JXTable{...}效果和预期一样好。现在,我想让DefaultColumnControlPopup菜单在弹出菜单中单击到元素后仍然打开,这样用户就可以进行多次单击,而无需在ColumnControlButton上进行烦人的单击。
有人知道怎么做吗?
我一直试图在本教程的基础上解决问题,但没有成功。
发布于 2013-10-03 17:06:26
经过详细的阐述,如果一个人知道怎么做就很容易了--很明显.
其他人的整体解决办法:
我有一个使用JXTable的类:
JXTable myTable = new JXTable(new MyTableModel())
...use_table_as_usually...表的类:
public class MyTable extends JXTable{
public MyTable(AbstractTableModel model){
super(model);
//remove items for horizontal scrollbar, pack and packall
this.getActionMap().remove("column.horizontalScroll");
this.getActionMap().remove("column.packAll");
this.getActionMap().remove("column.packSelected");
//first two columns should be shown permanently
ColumnControlButton controlButton = new ColumnControlButton(this){
@Override
protected ColumnControlPopup createColumnControlPopup(){
return (new NFColumnControlPopup());
}
class NFColumnControlPopup extends DefaultColumnControlPopup{
@Override
public void addVisibilityActionItems(List<? extends AbstractActionExt> actions){
for(int i = 0; i < actions.size(); i++){
AbstractActionExt action = actions.get(i);
JCheckBoxMenuItem chk = new JCheckBoxMenuItem(action);
chk.setUI(new KeepOpenCheckBox());
//disable first two items but they will be still shown greyed
if(i == 0 || i == 1){
chk.setEnabled(false);
chk.setSelected(false);
}
else{
chk.setEnabled(true);
chk.setSelected(true);
}
chk.addItemListener(action);
super.addItem(chk);
}
}
}
};
this.setColumnControl(controlButton);
}
}并最终使用自定义类来保持ColumnControlPopup打开:
public class KeepOpenCheckBox extends BasicCheckBoxMenuItemUI{
public static ComponentUI createUI(JComponent c){
return new KeepOpenCheckBox();
}
protected void doClick(MenuSelectionManager msm){
menuItem.doClick(0);
}
}就这样。在本例中,混合了三种情况:-how删除水平滚动条、pack和packall中不需要的项;-how禁用ColumnControlPopup中的某些列控件,但将其显示为灰色且不带复选标记;-how在单击JCheckBoxMenuItem后保持ColumnControlPopup打开;
解决方案是基于我在互联网上发现的一些资源,但有些信息是旧的或不起作用的(在JMenu中工作,但在弹出菜单中没有)。
https://stackoverflow.com/questions/19157129
复制相似问题