После некоторой проработки это легко, если знать, как это сделать - очевидно...
Полное решение для других:
У меня есть класс, в котором я использую 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);
}
}
Это все. В этом примере перепутаны 3 вещи: -как убрать ненужные элементы для горизонтальной полосы прокрутки, запаковать и запаковать; -как отключить некоторые элементы управления колонками из ColumnControlPopup
, но оставить их серыми и без галочки; -как оставить ColumnControlPopup
открытым после нажатия на JCheckBoxMenuItem
;
Решение основано на некоторых ресурсах, которые я нашел в Интернете, но некоторая информация устарела или не работает (работает в JMenu
, но не во всплывающем меню).
person
1ac0
schedule
03.10.2013
ColumnControlButton
) и контролировать каждый отJCheckBoxMenuItem
доsetEnabled()
иsetSelected()
- два из одиннадцати столбцов должны отображаться постоянно. - person 1ac0   schedule 03.10.2013