是否有任何干淨的方式允許用戶選擇JTable的多個非連續單元格? 或者我被迫實現我自己的ListSelectionModel?我使用JTable上的setCellSelectionEnabled()和setSelectionModel()方法玩過,但我只能選擇連續單元組。單獨的而不是連續的JTable的單元格選擇
編輯:
我試了@mKorbel很好的SSCCE。它對列表工作正常,但它似乎沒有完全在表上工作。這裏是一個SSCCE:
import java.awt.Component;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class TableSelection extends JFrame{
String[] columnNames = {"First Name",
"Last Name",
"Sport",
"# of Years",
"Vegetarian"};
Object[][] data = {
{"Kathy", "Smith",
"Snowboarding", new Integer(5), new Boolean(false)},
{"John", "Doe",
"Rowing", new Integer(3), new Boolean(true)},
{"Sue", "Black",
"Knitting", new Integer(2), new Boolean(false)},
{"Jane", "White",
"Speed reading", new Integer(20), new Boolean(true)},
{"Joe", "Brown",
"Pool", new Integer(10), new Boolean(false)}
};
public TableSelection(){
JPanel main= new JPanel();
JTable table = new JTable(data, columnNames){
@Override
protected void processMouseEvent(MouseEvent e) {
int modifiers = e.getModifiers() | InputEvent.CTRL_MASK;
// change the modifiers to believe that control key is down
int modifiersEx = e.getModifiersEx() | InputEvent.CTRL_MASK;
// can I use this anywhere? I don't see how to change the modifiersEx of the MouseEvent
MouseEvent myME = new MouseEvent((Component) e.getSource(), e.getID(), e.getWhen(), modifiers, e.getX(),
e.getY(), e.getXOnScreen(), e.getYOnScreen(), e.getClickCount(), e.isPopupTrigger(), e.getButton());
super.processMouseEvent(myME);
}
};
JScrollPane pane = new JScrollPane(table);
main.add(pane);
this.add(main);
this.setSize(800, 600);
this.setVisible(true);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new TableSelection();
}
}
我可以選擇非連續的行,但不是單個單元格。我的意思是,我想能夠選擇單元格0,0和3,3例如。
不可能用兩個一維選擇模型的疊加。你需要一個真正的二維模型。舊的codeguru網站上曾經有一個例子,它需要在ui代理中進行調整。不知道現在是/現在在哪裏 – kleopatra
@kleopatra:謝謝。我想我會找到一個不同的解決方案。 – Heisenbug
我可以把賞金放在你的問題上,也許有另一種解決方案,當然是 – mKorbel