JTable się nie odswierza

0

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
    */
0

Chyba niepotrzebnie sam sobie utrudniałem sprawę własnym modelem :P.
galleanv twój sposób działa elegancko dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1