직접 롤업해야하지만 사용자 지정 ListSelectionListener를 사용하여 수행 할 수 있습니다. 이런 식으로 작동 할 수 있습니다 :
@Override
public void valueChanged(ListSelectionEvent e) {
ListSelectionModel selectedModel = (ListSelectionModel) e.getSource();
for (ListSelectionModel model : models) {
if (model != selectedModel) {
model.removeListSelectionListener(this);
model.clearSelection();
model.addListSelectionListener(this);
}
}
}
여기서 models는 모든 JTable에 대한 ListSelectionModels를 보유하는 ArrayList입니다. 예를 들어
:
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
@SuppressWarnings("serial")
public class ListSelectionListenerExample extends JPanel {
private static final int TABLE_COUNT = 4;
private static final Integer[][] DATA = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
private static final String[] COL_NAMES = {"A", "B", "C"};
public ListSelectionListenerExample() {
ListSelectionGroup listSelectionGroup = new ListSelectionGroup();
setLayout(new GridLayout(1, 0));
for (int i = 0; i < TABLE_COUNT; i++) {
DefaultTableModel model = new DefaultTableModel(DATA, COL_NAMES);
JTable table = new JTable(model);
ListSelectionModel selectionModel = table.getSelectionModel();
listSelectionGroup.register(selectionModel);
add(new JScrollPane(table));
}
}
private static void createAndShowGui() {
ListSelectionListenerExample mainPanel = new ListSelectionListenerExample();
JFrame frame = new JFrame("ListSelectionListener Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}
import java.util.ArrayList;
import java.util.List;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class ListSelectionGroup {
private List<ListSelectionModel> models = new ArrayList<>();
private MyListener myListener = new MyListener();
public void register(ListSelectionModel model) {
models.add(model);
model.addListSelectionListener(myListener);
}
// overload method for convenience
public void register(JTable table) {
register(table.getSelectionModel());
}
// make a private inner class so that we don't accidentally add this to a
// ListSelectionModel without going through the register method
private class MyListener implements ListSelectionListener {
@Override
public void valueChanged(ListSelectionEvent e) {
ListSelectionModel selectedModel = (ListSelectionModel) e.getSource();
for (ListSelectionModel model : models) {
if (model != selectedModel) {
model.removeListSelectionListener(this);
model.clearSelection();
model.addListSelectionListener(this);
}
}
}
}
}
난 당신이 직접 코딩해야 할 거라고 생각하고, 당신이 쉽게 알아낼 수 있습니다 내기. –
이 작업을 수행하지는 않았지만 모든 JTable에서 공유하는 사용자 지정 선택 모델을 사용하려고합니다. –
아니요, 사용자 지정 선택 모델이 아니라 사용자 지정 및 공유 된 'ListSelectionListener'가 필요합니다. –