gpt4 book ai didi

java - 通过文本字段更新 JTable 内容

转载 作者:行者123 更新时间:2023-11-30 02:56:35 24 4
gpt4 key购买 nike

我是编程和 Java 新手。现在为了练习,我想制作一个简单的地址簿。到目前为止我可以添加和删除条目。我想做的下一件事是更改现有条目的值。我用谷歌搜索了很多选项如何做到这一点,但没有一个有效。我想这只是一个我看不到的简单的事情,因为我对此很陌生。这是我的 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);
}
}

这是我的 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);
}

我希望你能帮助我:D。我知道它可能不是最干净和最好的,但我仍然是一个初学者,感谢任何帮助和建议。

最佳答案

实现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);
}

如果您想从文本字段进行更改,只需将所选项目保留在成员中,然后单击更新按钮后,更改所选项目的字段并调用 fireTableDataChanged(); .

关于java - 通过文本字段更新 JTable 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37079284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com