2016-05-06 8 views
1

私はプログラミングとJavaを初めて使います。練習のために私は簡単なAdressbookを作りたいと思う。これまではエントリを追加したり削除したりすることができます。次のことは、既存のエントリから値を変更することです。私は多くのオプションを探そうとしましたが、それを行う方法はありませんでした。私は、私が見ることができないその単純なことは、これに新しいことを引き起こすと思う。ここ は、Swingのウィンドウのための私のコードです:JTableコンテンツトラフテキストフィールドを更新

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。私はそれが最善のものではないかもしれないと知っていますが、私はまだ初心者であり、助けや提案を感謝しています。

+0

あなたの意見や感想をお寄せください。 - ヌルレイアウトを使用しないでください。 Swingは、[Layout Manager](http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html)で使用するように設計されています。 – camickr

+0

[テーブルの使い方](http://docs.oracle.com/javase/tutorial/uiswing/components/table.html)は、 – MadProgrammer

答えて

2

テーブルモデルに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();を呼び出します。

+1

(1+)を起動するのに適しているかもしれませんが、 'fireTableCellUpdated (行、列); '、それ以外の場合、テーブルは変更の通知を受けません。詳細と例については、[Creating a TableModel]()のSwingチュートリアルのセクションを参照してください。 – camickr

+0

また、table.updateUI();これは行の高さの自動更新を処理するでしょう – PeaceIsPearl

+0

@camickr完了していただきありがとうございます。私はその部分を追加しました。 – rdonuk

0

大変助けてくれてありがとう!今私の小さな "App"に取り組んでいます。あなたは良いチュートリアルを知っていますか?私は店のような機能を追加したいので。リストから項目を選択し、それを「ShoppingCart」に追加してから、カートを表示し、追加した内容を見て最終的に削除します。同様に、これは本当に新しいことですが、もっと多くのことを学んでいます。D

関連する問題