通过文本字段

时间:2016-05-06 18:38:37

标签: java swing jtable jtextfield setvalue

我是编程和Java的新手。现在为练习我想制作一个简单的Adressbook。到目前为止,我可以添加和删除Entrys。我想做的下一件事是改变现有条目的值。我用谷歌搜索了许多选项如何做到这一点,但没有一个工作。我想这只是一件我无法看到的简单事情,因此对此我不熟悉。 这是我的Swing Window代码:

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。我知道这可能不是最干净和最好的,但我仍然是初学者,感谢任何帮助和建议。

2 个答案:

答案 0 :(得分:2)

在表格模型中实施<div id="top"> <div class="mainLayout"> <div class="text"> HERE's.. </div> </div> </div> <div id="bottom"> <div class="mainLayout"> <div class="text"> ...STUFF </div> </div> </div> isCellEditable方法,您可以直接在表格中修改数据。

setValuAt

如果您想要从文本字段进行更改,只需将所选项目保留在成员中,并在点击更新按钮后,更改所选项目的字段并致电@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); }

答案 1 :(得分:0)

感谢您的帮助!我正在研究我的小“App”。你知道任何好的教程吗?因为我想添加类似商店的功能。就像从列表中选择一个项目然后将其添加到“ShoppingCart”,然后查看购物车并查看您添加的内容并最终将其删除。就像是说我真的很新,但学习越来越多:D