简体   繁体   English

更新JTable内容通过文本字段

[英]Update JTable Content trough Textfields

i'm new to programming and Java. 我是编程和Java的新手。 Now for Practice i want to make a simple Adressbook. 现在,对于练习,我想制作一个简单的地址簿。 So far i can add and remove Entrys. 到目前为止,我可以添加和删除条目。 The next thing i want to make is change values from an existing entry. 我想做的下一件事是更改现有条目的值。 I googled many Options how to do that but none works. 我用谷歌搜索了很多选项,但是没有用。 I guess its just a simple thing i'm not able to see, cause im new to this. 我想这只是我无法看到的简单事情,这是我的新想法。 Here is my Code for the Swing Window: 这是我的Swing窗口代码:

package View;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JTable;

import Model.DatenErstellen;
import Model.ManlegenTModel;
import Model.Mitarbeiter;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class ManlegenPanel extends JPanel{

private static final long serialVersionUID = 1L;
private JTextField txfvorname;
private JTextField txfnachname;
private JTextField txfstrasse;
private JTextField txfhausnummer;
private JTextField txfplz;
private JTextField txfort;
private JTable table;
private ManlegenTModel tableModel;
private Haupt hf;


/**
 * Launch the application.
 */
public ManlegenPanel (Haupt frame){
    hf = frame; 
    setLayout(null);

    JLabel lblVorname = new JLabel("Vorname");
    lblVorname.setBounds(239, 56, 56, 16);
    add(lblVorname);

    JLabel lblNachname = new JLabel("Nachname");
    lblNachname.setBounds(239, 86, 76, 16);
    add(lblNachname);

    JLabel lblStrasse = new JLabel("Strasse");
    lblStrasse.setBounds(239, 112, 56, 16);
    add(lblStrasse);

    txfvorname = new JTextField();
    txfvorname.setBounds(339, 53, 116, 22);
    txfvorname.setEditable(false);
    add(txfvorname);
    txfvorname.setColumns(10);

    txfnachname = new JTextField();
    txfnachname.setBounds(339, 83, 116, 22);
    txfnachname.setEditable(false);
    add(txfnachname);
    txfnachname.setColumns(10);

    txfstrasse = new JTextField();
    txfstrasse.setBounds(339, 109, 116, 22);
    txfstrasse.setEditable(false);
    add(txfstrasse);
    txfstrasse.setColumns(10);

    txfhausnummer = new JTextField();
    txfhausnummer.setBounds(339, 140, 116, 22);
    txfhausnummer.setEditable(false);
    add(txfhausnummer);
    txfhausnummer.setColumns(10);

    JLabel lblHausnummer = new JLabel("Hausnummer");
    lblHausnummer.setBounds(239, 143, 76, 16);
    add(lblHausnummer);

    JLabel lblPlz = new JLabel("PLZ");
    lblPlz.setBounds(239, 173, 56, 16);
    add(lblPlz);

    JLabel lblOrt = new JLabel("Ort");
    lblOrt.setBounds(239, 202, 56, 16);
    add(lblOrt);

    txfplz = new JTextField();
    txfplz.setBounds(339, 170, 116, 22);
    txfplz.setEditable(false);
    add(txfplz);
    txfplz.setColumns(10);

    txfort = new JTextField();
    txfort.setBounds(339, 199, 116, 22);
    txfort.setEditable(false);
    add(txfort);
    txfort.setColumns(10);

    JScrollPane scrollPane = new JScrollPane();
    scrollPane.setBounds(12, 56, 205, 279);
    add(scrollPane);

    tableModel = new ManlegenTModel();
    table = new JTable(tableModel);
    table.addMouseListener(new MouseAdapter(){
        public void mouseClicked(MouseEvent e){
            if (e.getClickCount() == 1){
                Point p = e.getPoint();
                int row = table.rowAtPoint(p);
                txfvorname.setText(Mitarbeiter.mitarbeiterListe.get(row).getVorname());
                txfnachname.setText(Mitarbeiter.mitarbeiterListe.get(row).getNachname());
                txfstrasse.setText(Mitarbeiter.mitarbeiterListe.get(row).getStrasse());
                txfhausnummer.setText(Mitarbeiter.mitarbeiterListe.get(row).getHausnummer());
                txfplz.setText(Mitarbeiter.mitarbeiterListe.get(row).getPlz());
                txfort.setText(Mitarbeiter.mitarbeiterListe.get(row).getOrt());
            }

        }

    });
    scrollPane.setViewportView(table);

    JButton btnnderungbernehmen = new JButton("Speichern");
    btnnderungbernehmen.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            speicherMitarbeiter();
            sperren();
            leer();
            tableModel.fireTableDataChanged();

            }
    });
    btnnderungbernehmen.setBounds(239, 299, 104, 25);
    add(btnnderungbernehmen);

    JButton btnZurck = new JButton("zur\u00FCck");
    btnZurck.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            hf.getCl().show(hf.getPanelCard(), "start");
        }
    });
    btnZurck.setBounds(264, 376, 97, 25);
    add(btnZurck);

    JButton btnNeuerMitarbeiter = new JButton("Neuer Mitarbeiter");
    btnNeuerMitarbeiter.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            leer();
            zulassen();
        }
    });
    btnNeuerMitarbeiter.setBounds(12, 26, 133, 25);
    add(btnNeuerMitarbeiter);

    JButton btnLschen = new JButton("Entfernen");
    btnLschen.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
             tableModel.entfernen(table.getSelectedRow());
                tableModel.fireTableDataChanged();
                leer();

        }
    });
    btnLschen.setBounds(355, 299, 97, 25);
    add(btnLschen);

    JButton btnndern = new JButton("\u00E4ndern");
    btnndern.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            zulassen();
        }
    });
    btnndern.setBounds(154, 26, 97, 25);
    add(btnndern);

    JButton btnAnnehmen = new JButton("annehmen");
    btnAnnehmen.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            tableModel.setValueAt(txfvorname.getText(), table.getSelectedRow(), 0);
            tableModel.setValueAt(txfnachname.getText(), table.getSelectedRow(), 1);
            tableModel.setValueAt(txfstrasse.getText(), table.getSelectedRow(), 2);
            tableModel.setValueAt(txfhausnummer.getText(), table.getSelectedRow(), 3);
            tableModel.setValueAt(txfplz.getText(), table.getSelectedRow(), 4);
            tableModel.setValueAt(txfort.getText(), table.getSelectedRow(), 5);
            tableModel.fireTableDataChanged();
            System.out.println(Mitarbeiter.getMitarbeiter());
        }

    });

    btnAnnehmen.setBounds(462, 299, 97, 25);
    add(btnAnnehmen);

    JButton btnFrisch = new JButton("frisch");
    btnFrisch.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            tableModel.fireTableDataChanged();

        }
    });
    btnFrisch.setBounds(65, 343, 97, 25);
    add(btnFrisch);

}



private void speicherMitarbeiter() {
    Mitarbeiter mitarbeiter = DatenErstellen.erstelleMitarbeiter(txfvorname.getText(),
               txfnachname.getText(),
               txfstrasse.getText(),
               txfhausnummer.getText(),
               txfplz.getText(),
               txfort.getText());
    JOptionPane.showMessageDialog(null,"Mitarbeiter wurde gespeichert","Gespeichert",
            JOptionPane.PLAIN_MESSAGE);
}
private void leer() {
    txfvorname.setText(null);
    txfnachname.setText(null);
    txfstrasse.setText(null);
    txfhausnummer.setText(null);
    txfplz.setText(null);
    txfort.setText(null);
}
private void sperren(){
    txfvorname.setEditable(false);
    txfnachname.setEditable(false);
    txfstrasse.setEditable(false);
    txfhausnummer.setEditable(false);
    txfplz.setEditable(false);
    txfort.setEditable(false);      
}
private void zulassen(){
    txfvorname.setEditable(true);
    txfnachname.setEditable(true);
    txfstrasse.setEditable(true);
    txfhausnummer.setEditable(true);
    txfplz.setEditable(true);
    txfort.setEditable(true);
}
}

and this is my TableModel: 这是我的TableModel:

package Model;

import java.util.ArrayList;

import javax.swing.table.AbstractTableModel;

public class ManlegenTModel extends AbstractTableModel{
private ArrayList<Mitarbeiter> mliste = Mitarbeiter.getMitarbeiterListe();

String [] columnNames = { "Vorname",
                           "Nachname"};

 public int getRowCount() {
    // TODO Auto-generated method stub
    return Mitarbeiter.getMitarbeiterListe().size();
 }

@Override
public int getColumnCount() {
    // TODO Auto-generated method stub
    return this.columnNames.length;
}

@Override
public String getColumnName(int col) {
    return this.columnNames[col];
}

@Override
public Object getValueAt(int row, int col) {
    Mitarbeiter mitarbeiter = mliste.get(row);
    switch(col) {
    case 0 : return mitarbeiter.getVorname();
    case 1 : return mitarbeiter.getNachname();
    case 2 : return mitarbeiter.getStrasse();
    case 3 : return mitarbeiter.getHausnummer();
    case 4 : return mitarbeiter.getPlz();
    case 5 : return mitarbeiter.getOrt();

}
return null;
}

 public void entfernen(int selectedRow) {
    mliste.remove(selectedRow);     
}

I hope you can help me :D. 我希望你能帮助我:D。 I know it might no be the cleanest and best got but i'm still a beginner an appreciate any help and suggestions. 我知道它可能不是最干净,最好的,但是我仍然是一个初学者,感谢您的帮助和建议。

Implement isCellEditable and setValuAt methods in your table model and with this you will be able to edit your data directly from the table. 在表模型中实现isCellEditablesetValuAt方法,使用此方法,您可以直接从表中编辑数据。

@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
    return true;
}

@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    Mitarbeiter mitarbeiter = mliste.get(row);
    switch (col) {
    case 0:
        mitarbeiter.setVorname(aValue.toString());
     //.. add other cases
    }

    fireTableCellUpdated(row, column);
}

And if you want to make changes from text fields, just keep the selected item in a member and after update button clicked, change the fields of selected item and call fireTableDataChanged(); 而且,如果要从文本字段进行更改,只需将所选项目保留在成员中,然后单击更新按钮,即可更改所选项目的字段并调用fireTableDataChanged(); .

Thanks for the great Help! 感谢您的大力帮助! Im now working on my little "App". 我现在正在开发我的小“应用程序”。 Do you know any good Tutorials? 你知道任何好的教程吗? Cause i want to add shop-like functions. 因为我要添加类似商店的功能。 Like choose an item from a list and then add it to a "ShoppingCart", then view the Cart and look what you added and eventualy delete it again. 就像从列表中选择一个项目,然后将其添加到“购物车”中一样,然后查看购物车并查看添加的内容,最后将其再次删除。 Like is said im realy new to this but learning more and more :D 就像我说的那样,这真的很新,但是了解的越来越多了:D

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM