witam
oto przykładowy kod
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
public class doProb {
public static void main(String[] a) {
JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p1 = new JPanel(new BorderLayout());
JPanel p2 = new JPanel(new BorderLayout());
final JTable table;
String[] columnTitles = { "A", "B", "C", "D" };
Object[][] rowData = { { "11", "12", "13", "14" }, { "21", "22", "23", "24" },
{ "31", "32", "33", "34" }, { "41", "42", "44", "44" } };
final DefaultTableModel model1 = new DefaultTableModel(rowData,columnTitles);
table = new JTable(model1);
final JTable table2;
String[] columnTitles2 = { "A", "B", "C", "D" };
Object[][] rowData2 = { };
final DefaultTableModel model2 = new DefaultTableModel(rowData2,columnTitles2);
table2 = new JTable(model2);
table.setCellSelectionEnabled(true);
ListSelectionModel cellSelectionModel = table.getSelectionModel();
cellSelectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
cellSelectionModel.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
System.out.println("1 słuchacz");
int i2,size2;//kasowanie wierszy
size2 = model2.getRowCount();
for(i2=size2-1; i2>=0; i2--){
model2.removeRow(i2);
}
Object selectedData;
int[] selectedRow = table.getSelectedRows();
int[] selectedCol = table.getSelectedColumns();
selectedData = table.getValueAt(selectedRow[0], selectedCol[0]);
System.out.println("Selected: " + selectedData);
model2.addRow(new Object[]{selectedData, selectedData, selectedData});
}
});
table2.setCellSelectionEnabled(true);
ListSelectionModel cellSelectionModel2 = table2.getSelectionModel();
cellSelectionModel2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
cellSelectionModel2.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
System.out.println("2 słuchacz");
Object selectedData2;
int[] selectedRow2 = table2.getSelectedRows();
int[] selectedCol2 = table2.getSelectedColumns();
selectedData2 = table.getValueAt(selectedRow2[0], selectedCol2[0]);
System.out.println("Selected: " + selectedData2);
model1.addRow(new Object[]{selectedData2, selectedData2, selectedData2});
}
});
p1.add(new JScrollPane(table));
frame.add(p1, BorderLayout.NORTH);
p2.add(new JScrollPane(table2));
frame.add(p2, BorderLayout.CENTER);
frame.setSize(300, 600);
frame.setVisible(true);
}
}
powyższy kod bez linijki model2.removeRow(i2); działa dobrze, naprzemienne dodawanie wierszy jest ok
natomiast z linijką **model2.removeRow(i2); ** naprzemienne dodawanie wierszy już nie
po wielu testach doszedłem tylko do tego iż **model2.removeRow(i2); ** powoduje wywołanie 2 słuchacza i błąd związany z brakiem wartości w tablicy selectedRow2
Dlaczego się tak dzieje?
I jak to poprawnie zrobić aby naprzemiene dodawanie wierszy do tabel (przy usuwaniu wszystkich wierszy z 2 tabeli) działało poprawnie?
dzięki za każdą sugestię