KLASA Z TABLICA:
nie potrafię odświeżyc tablicy aby po dodaniu wiersza wyświetlił on mi się we framie
rozwiązania które próbowałem opisałem w komentarzach zamieszczam tez je na końcu postu
public class Table extends JPanel {
/*pole zapewnia dostep do Tab2*/
private Tab2 tab2;
JTable table;
MyTableModel model;
/** konstruktor bezparametrowy */
public Table() {
super(new GridLayout(1,0));
model = new MyTableModel();
table = new JTable(model);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.getColumnModel().getColumn(0).setPreferredWidth(70);
table.getColumnModel().getColumn(1).setPreferredWidth(120);
table.getColumnModel().getColumn(2).setPreferredWidth(367);
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
}
public void przylaczTab2(Tab2 tab2)
{
this.tab2 = tab2;
}
/*wykorzystuje dane z tab2 zeby dodac nowy wiersz*/
public void addRow()
{
int dl = model.data.length;
Object[][] dataTemp = new Object[dl+1][3];
for (int i = 0;i<dl;i++)
for(int j = 0;j<3;j++)
dataTemp[i][j] = model.data[i][j];
dataTemp[dl][0] = tab2.imieTextField.getText();
dataTemp[dl][1] = tab2.nazwiskoTextField.getText();
dataTemp[dl][2] = tab2.adres1TextField.getText() + " " + tab2.adres2TextField.getText();
model.data = new Object[dl+1][3];
model.data = dataTemp;
model.fireTableRowsInserted(0, model.data.length);
}
class MyTableModel extends AbstractTableModel {
public String[] columnNames = {"Imie", "Nazwisko", "adres"};
public Object[][] data = new Object[0][0];
@Override
public String getColumnName(int col) {
return columnNames[col];
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public int getRowCount() {
if(Arrays.equals(data, new Object[0][0]))
return data.length;
else
return 0;
}
@Override
public Object getValueAt(int row, int col) {
return data[row][col];
}
@Override
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
}
}
KLASA Z PRZYCISKIEM KTORY DODAJE ELEMENT
public class Tab2 extends JPanel implements ActionListener {
Tab1 tab1;
Table table;
JTabbedPane tabbedPane;
JButton dodaj;
JButton poprawDane;
JTextField imieTextField;
JTextField nazwiskoTextField;
JTextField plecTextField;
JTextField adres1TextField;
JTextField adres2TextField;
public Tab2()
{
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
JPanel imie = new JPanel();
JLabel imieLabel = new JLabel("Imie: ");
imieTextField = new JTextField(13);
imieTextField.setEditable(false);
imie.add(imieLabel);
imie.add(imieTextField);
add(imie);
JPanel nazwisko = new JPanel();
JLabel nazwiskoLabel = new JLabel("Nazwisko: ");
nazwiskoTextField = new JTextField(13);
nazwiskoTextField.setEditable(false);
nazwisko.add(nazwiskoLabel);
nazwisko.add(nazwiskoTextField);
add(nazwisko);
JPanel plec = new JPanel();
JLabel plecLabel = new JLabel("Plec: ");
plecTextField = new JTextField(13);
plecTextField.setEditable(false);
plec.add(plecLabel);
plec.add(plecTextField);
add(plec);
JPanel adres1 = new JPanel();
JLabel adres1Label = new JLabel("Adres1: ");
adres1TextField = new JTextField(13);
adres1TextField.setEditable(false);
adres1.add(adres1Label);
adres1.add(adres1TextField);
add(adres1);
JPanel adres2 = new JPanel();
JLabel adres2Label = new JLabel("Adres2: ");
adres2TextField = new JTextField(13);
adres2TextField.setEditable(false);
adres2.add(adres2Label);
adres2.add(adres2TextField);
add(adres2);
JPanel przyciski = new JPanel();
dodaj = new JButton("Dodaj");
dodaj.addActionListener(this);
dodaj.setActionCommand("dodaj");
dodaj.setEnabled(false);
poprawDane = new JButton("Popraw dane");
poprawDane.addActionListener(this);
poprawDane.setActionCommand("poprawDane");
poprawDane.setEnabled(false);
przyciski.add(dodaj);
przyciski.add(poprawDane);
add(przyciski);
}
public void przylaczTab1(Tab1 tab1)
{
this.tab1 = tab1;
}
public void przylaczTabbedPane(JTabbedPane tabbedPane)
{
this.tabbedPane = tabbedPane;
}
public void przylaczTable(Table table)
{
this.table = table;
}
public void aktualizujDane()
{
imieTextField.setText(tab1.imieTextField.getText());
nazwiskoTextField.setText(tab1.nazwiskoTextField.getText());
plecTextField.setText(tab1.plecComboBox.getSelectedItem().toString());
adres1TextField.setText(tab1.kodPocztowy1TextField.getText() + "-" + tab1.kodPocztowy2TextField.getText()
+ " " + tab1.miastoTextField.getText());
if(!tab1.numerMieszkaniaTextField.getText().equals(""))
adres2TextField.setText("ul. " + tab1.ulicaTextField.getText() + " " + tab1.numerDomuTextField.getText()
+ "/" + tab1.numerMieszkaniaTextField.getText());
else
adres2TextField.setText("ul. " + tab1.ulicaTextField.getText() + " " + tab1.numerDomuTextField.getText());
}
@Override
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if("dodaj".equals(cmd)){
table.addRow(); // dodanie elementu gdy naciskam guzik dodaj
System.out.print(table.model.data.length);
/* tutaj wypisywalem sobie ilosc elementow
* tej tabeli zeby sprawdzic czy faktycznie dodaje czy nie
* efekt = za kazdym nacisnieciem guzika dodaje element bez zadnych problemow
* odswierzanie tablicy (ktore myslalem ze bedzie dzialac dawalem tutaj probowalem:
* table.model.fireTableDataChanged(); bez skutku
* table.repaint(); bezskutku
* table.table.repaint(); bezskutku
* table.model.fireTableRowsInserted(0,1) //
* w tym wypadku 0 pierwszy wiersz 1 ostatni wierszy
* (testowane tylko dla 1 wiersza, dlatego 1 i tak nie dziala)
* probowalem dodawac te instrukcje rownierz w funkcji dodajacej wiersz i nic
*/
}else if("poprawDane".equals(cmd)){
poprawDane.setEnabled(false);
dodaj.setEnabled(false);
tab1.dalej.setEnabled(true);
tab1.imieTextField.setEditable(true);
tab1.nazwiskoTextField.setEditable(true);
tab1.miastoTextField.setEditable(true);
tab1.ulicaTextField.setEditable(true);
tab1.kodPocztowy1TextField.setEditable(true);
tab1.kodPocztowy2TextField.setEditable(true);
tab1.numerDomuTextField.setEditable(true);
tab1.numerMieszkaniaTextField.setEditable(true);
tab1.plecComboBox.setEnabled(true);
tabbedPane.setSelectedIndex(0);
}//dodawanie elementu do tabeli
}
}
/* tutaj wypisywalem sobie ilosc elementow //"tutaj" czyli w obsludze przycisku "dodaj"
- tej tabeli zeby sprawdzic czy faktycznie dodaje czy nie
- efekt = za kazdym nacisnieciem guzika dodaje element bez zadnych problemow
- odswierzanie tablicy (ktore myslalem ze bedzie dzialac dawalem tutaj probowalem:
- table.model.fireTableDataChanged(); bez skutku
- table.repaint(); bezskutku
- table.table.repaint(); bezskutku
- table.model.fireTableRowsInserted(0,1) //
- w tym wypadku 0 pierwszy wiersz 1 ostatni wierszy
- (testowane tylko dla 1 wiersza, dlatego 1 i tak nie dziala)
- probowalem dodawac te instrukcje rownierz w funkcji dodajacej wiersz i nic
*/