EventYearMatchingWindowのJTableのチェックボックスをクリックすると、EventYearMatchingUnitPanelクラスのJTableのすべてのチェックボックスを自動的に選択します。Java:別のチェックボックスをクリックしたときにJTableのチェックボックスを自動的に更新する
最初のピクチャ(https://ibb.co/fsqtrQ)の「ユニット9」チェックボックスをクリックすると、自動的に第二の画像にすべての5つのチェックボックスを選択する必要があり(https://ibb.co/f8ja5k)
私はチェックボックスがあるかどうかを検出するTabelModelListenerにまた、tableChanged()メソッドを使用クリックしたチェックボックスをクリックすると、他のチェックボックスの値がBoolean.FALSEからBoolean.TRUEに変更されますが、チェックボックスは更新されません(物理的にチェックマークが表示されません)。
public class EventYearMatchingWindow extends JFrame implements
TableModelListener
{
private boolean columnHeaderClicked;
private ArrayList<Category> categories;
private JPanel mainPanel, listPanel, buttonPanel;
private ArrayList<Item> selectedItems;
private EventYearMatchingItemChoosing[] unitPanels;
Object data[][];
public EventYearMatchingWindow(ArrayList<Category> c){
...
String[] columnNames = {"Include?", ""};
data = new Object[6][2];
for(int i = 0; i < 6; i++){
data[i][0] = Boolean.FALSE;
data[i][1] = "Unit " + (i+8);
}
DefaultTableModel model = new DefaultTableModel(data, columnNames) {
private static final long serialVersionUID = 1L;
@Override
public Class getColumnClass(int columnIndex) {
if (columnIndex == 0){
return Boolean.class;
}
return super.getColumnClass(columnIndex);
}
};
JTable table = new JTable(model);
table.getModel().addTableModelListener(this);
table.addMouseListener(new java.awt.event.MouseAdapter() {
....
@Override
public void mouseClicked(java.awt.event.MouseEvent evt) {
int row = table.rowAtPoint(evt.getPoint());
int col = table.columnAtPoint(evt.getPoint());
if (row == -1 && col >= 0){
columnHeaderClicked = true;
}
if (row >= 0 && col == 1 && !columnHeaderClicked) {
mainPanel.removeAll();
System.out.println(unitPanels[row].getData()[0][0]);
unitPanels[row].revalidate();
unitPanels[row].repaint();
mainPanel.add(unitPanels[row]);
JPanel nButtonPanel = new JPanel();
Button back = new Button("Back");
nButtonPanel.add(back);
back.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
mainPanel.removeAll();
mainPanel.add(listPanel);
mainPanel.add(buttonPanel);
mainPanel.revalidate();
repaint();
}
});
mainPanel.add(nButtonPanel);
mainPanel.revalidate();
repaint();
}
}
});
}
public void tableChanged(TableModelEvent e){
int row = e.getFirstRow();
int column = e.getColumn();
TableModel model = (TableModel)e.getSource();
String columnName = model.getColumnName(column);
Object thatValue = model.getValueAt(row, column);
data[row][column] = thatValue;
for(int i = 0; i < unitPanels[row].getNumRows(); i++){
unitPanels[row].setToSelectedState(i);
}
}
}
そして:
//for the first JTable
public void tableChanged(TableModelEvent e){
int row = e.getFirstRow();
int column = e.getColumn();
TableModel model = (TableModel)e.getSource();
String columnName = model.getColumnName(column);
Object thatValue = model.getValueAt(row, column);
data[row][column] = thatValue;
for(int i = 0; i < unitPanels[row].getNumRows(); i++){
unitPanels[row].setToSelectedState(i);
}
}
//for the second JTable
public void setToSelectedState(int row){
data[row][0] = Boolean.TRUE;
model.fireTableCellUpdated(row, 0);
}
は、ここでは、コードの大きな絵だ
public class EventYearMatchingItemChoosing extends JPanel implements TableModelListener
{
Category category;
private boolean columnHeaderClicked;
private int size;
private ArrayList<Item> items;
private Object[][] data;
DefaultTableModel model;
public EventYearMatchingItemChoosing(String s, ArrayList<Category> c){
...
String[] columnNames = {"Include?", "Event", "Year"};
data = new Object[size][3]
for(int i = 0; i < category.getItems().size(); i++){
if(!category.getItems().get(i).getEvent().equals("") && !category.getItems().get(i).getYear().equals("")){
data[i][0] = Boolean.FALSE;
data[i][1] = category.getItems().get(i).getEvent();
data[i][2] = category.getItems().get(i).getYear();
}
}
model = new DefaultTableModel(data, columnNames) {
private static final long serialVersionUID = 1L;
@Override
public Class getColumnClass(int columnIndex) {
if (columnIndex == 0){
return Boolean.class;
}
return super.getColumnClass(columnIndex);
}
};
JTable table = new JTable(model);
table.getModel().addTableModelListener(this);
...
}
...
public void tableChanged(TableModelEvent e){
int row = e.getFirstRow();
int column = e.getColumn();
TableModel model = (TableModel)e.getSource();
String columnName = model.getColumnName(column);
Object thatValue = model.getValueAt(row, column);
data[row][column] = thatValue;
}
public void setToSelectedState(int row){
data[row][0] = Boolean.TRUE;
model.fireTableCellUpdated(row, 0);
}
}
あなたがコンパイルされないでしょう掲示コードの小さな、不完全なスニペット。問題を再現した最小限の完全な例を投稿してください。 –
ありがとう、私はコード全体を更新しました。 –
[mcve]には「最小」があり、これは「コード全体」の反対です。ちょうどFYI。 – user1803551