Java 通过文本字段更新JTable内容
我不熟悉编程和Java。现在为了练习,我想做一个简单的地址簿。到目前为止,我可以添加和删除入口。接下来我要做的是更改现有条目中的值。我在谷歌上搜索了很多选项,但没有一个可行。我想这只是一件我看不到的简单事情,因为我对这件事还不熟悉。 以下是我的Swing窗口代码:Java 通过文本字段更新JTable内容,java,swing,jtable,jtextfield,setvalue,Java,Swing,Jtable,Jtextfield,Setvalue,我不熟悉编程和Java。现在为了练习,我想做一个简单的地址簿。到目前为止,我可以添加和删除入口。接下来我要做的是更改现有条目中的值。我在谷歌上搜索了很多选项,但没有一个可行。我想这只是一件我看不到的简单事情,因为我对这件事还不熟悉。 以下是我的Swing窗口代码: package View; import javax.swing.JPanel; import javax.swing.JScrollPane; import java.awt.event.MouseEvent; import ja
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);
}
}
这是我的桌面模型:
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);
}
包模型;
导入java.util.ArrayList;
导入javax.swing.table.AbstractTableModel;
公共类ManlegenTModel扩展了AbstractTableModel{
private ArrayList mliste=Mitarbeiter.getMitarbeiterListe();
String[]columnNames={“Vorname”,
“Nachname”};
public int getRowCount(){
//TODO自动生成的方法存根
返回Mitarbeiter.getMitarbeiterListe().size();
}
@凌驾
public int getColumnCount(){
//TODO自动生成的方法存根
返回this.columnNames.length;
}
@凌驾
公共字符串getColumnName(int-col){
返回此。columnNames[col];
}
@凌驾
公共对象getValueAt(整数行,整数列){
Mitarbeiter Mitarbeiter=mliste.get(行);
开关(col){
案例0:返回mitarbeiter.getVorname();
案例1:返回mitarbeiter.getNachname();
案例2:返回mitarbeiter.getStrasse();
案例3:返回mitarbeiter.gethausnumer();
案例4:返回mitarbeiter.getPlz();
案例5:返回mitarbeiter.getOrt();
}
返回null;
}
公共void entfernen(int selectedRow){
mliste.remove(选择箭头);
}
我希望您能帮助我:D.我知道这可能不是最干净、最好的,但我还是一个初学者,非常感谢您的帮助和建议。在您的表模型中实现
isCellEditable
和setevaluation
方法,这样您就可以直接从表中编辑数据
@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();
谢谢您的帮助!我现在正在开发我的小“应用程序”.你知道什么好的教程吗?因为我想添加类似商店的功能。比如从列表中选择一个项目,然后将其添加到“ShoppingCart”中,然后查看购物车并查看添加的内容,最后再次将其删除。正如所说,我对此非常陌生,但了解的内容越来越多:D(1+)但不要忘记fireTableCellUpdated(行、列);
,否则表将不会收到更改通知。有关更多信息和示例,请参阅Swing教程中关于[Creating a TableModel]()的部分。还有table.updateUI(),它将负责行的自动更新height@camickr谢谢完成。我添加了该部分。@Mrunal我认为行高不需要更改。而且updateUI
是与L&F相关的方法,因此不需要在此处调用它。table.updateUI()
不好,不好的主意。你应该永远不需要调用这个方法,事实上,如果表格模型
实现正确,JTable
将自动更新以响应更改感谢任何帮助和建议。
-不要使用空布局。Swing是为与一起使用而设计的。可能是一个好地方,不是o开始