2016-01-03 25 views
1

如何將數組值加載到JTable中,以便無論何時打開表單,它都會顯示錶的以前的值?我不想將表單連接到任何數據庫。如何將值加載到JTable中,以便在表單打開時顯示以前的值?

這是我的代碼到目前爲止,它允許我輸入文本到文本字段,當我點擊「創建客戶」按鈕時,它將值存儲到JTable。但是,如果我退出並重新打開表單,表中以前的數據就會消失。我已經做了一些研究,但似乎將netbeans連接到數據庫是保存和檢索數據的唯一方法。但是,我相信也可以將數據存儲到數組中,但是我不知道如何將數組中的值帶入表中。

我需要一些幫助。這是我的學校項目。 僅供參考,一些符號的我用:rbtn = radiobutton, tb = textfields, lbl = label

public class Customer extends javax.swing.JFrame { 
String gender; 
int year = Calendar.getInstance().get(Calendar.YEAR); 
int month = Calendar.getInstance().get(Calendar.MONTH); 
int day = Calendar.getInstance().get(Calendar.DAY_OF_MONTH); 

int m=10; //array memory size 

String[] name = new String[m]; 
String[] age = new String[m]; 
String[] genderm = new String [m]; 
String[] id = new String [m]; 
String[] mobile = new String [m]; 
String[] email = new String [m]; 
String[] address = new String [m]; 
String[] date = new String [m]; 
String[] photo = new String[m]; 

public Customer() { 
    initComponents(); 
    tbdate.setText(day+"/"+(month+1)+"/"+year); 
    lblphoto.setIcon(null);    
}  

private void btncreateActionPerformed(java.awt.event.ActionEvent evt)  {           
    // TODO add your handling code here: 
    if (rbtnmale.isSelected()){ 
     gender = "Male"; 
    } 
    else if (rbtnfemale.isSelected()){ 
     gender = "Female"; 
    } 
    DefaultTableModel model = (DefaultTableModel) jtablecustinfo.getModel(); 
    model.addRow(new Object[]{tbname.getText(),tbage.getText(),gender,tbid.getText(),tbmobile.getText(),tbemail.getText(),tbaddress.getText(),tbdate.getText(),lblphoto.getIcon()}); 

    for(int i=0;i<m;i++){ 
    name[i]=tbname.getText(); 
    age[i] = tbage.getText(); 
    genderm[i]=gender; 
    id[i]=tbid.getText(); 
    mobile[i]=tbmobile.getText(); 
    email[i]=tbemail.getText(); 
    address[i]=tbaddress.getText(); 
    date[i]=tbdate.getText(); 
    photo[i]= tbimage.getText();; 
    } 

    //Reset everything after creation 
    JOptionPane.showMessageDialog(null,"Successfully Created Customer"); 
    tbname.setText(""); 
    tbage.setText(""); 
    tbid.setText(""); 
    tbmobile.setText(""); 
    tbemail.setText(""); 
    tbaddress.setText(""); 
    tbdate.setText(""); 
    rbtnmale.setSelected(false); 
    rbtnfemale.setSelected(false); 
    tbdate.setText(day+"/"+(month+1)+"/"+year); 
    gender = ""; 
    tbimage.setText(""); 
    lblphoto.setText("   -Import photo-"); 
    lblphoto.setIcon(null); 
}           

我已經包括了我的代碼的要點,希望它足以查看!

+0

對於少量的數據,考慮'java.util.prefs.Preferences'。 – trashgod

+0

@trashgod啊,你能給我提供一些關於如何使用它的例子嗎?對不起,我沒有在課堂上遇到過這個功能,我做了一些研究,我只知道它可以保存用戶的偏好,但是怎麼做? – Marcus

+0

我已在下面詳細闡述。 – trashgod

回答

2

對於少量數據,請考慮java.util.prefs.Preferences

你能爲我提供一些關於如何使用它的例子嗎?

幾個例子檢查在Preferences API Overview和實施例中引用hereAPIcode)。或者,考慮javax.jnlp.PersistenceService,引用爲here,「對於在受限執行環境中運行的應用程序」。

這個最簡單的示例通過將以前保存的值添加到表中並覆蓋表模型的setValueAt()實現來更新單個單元以保存任何更改。編輯表格,退出並重新啓動以查看效果。

image

package org.name.table; 

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.util.prefs.Preferences; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 

/** 
* @see https://stackoverflow.com/a/34616583/230513 
*/ 
public class TablePreference { 

    private void display() { 
     JFrame f = new JFrame("TablePreference"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(new JScrollPane(new JTable(new PrefModel()) { 

      @Override 
      public Dimension getPreferredScrollableViewportSize() { 
       return new Dimension(128, 32); 
      } 
     })); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    private static class PrefModel extends DefaultTableModel { 

     private static final int DEFAULT = 42; 
     private static final String VALUE_NAME = "value"; 
     private final Preferences p = Preferences.userNodeForPackage(TablePreference.class); 

     public PrefModel() { 
      addColumn("A"); 
      addRow(new Object[]{p.getInt(VALUE_NAME, DEFAULT)}); 
     } 

     @Override 
     public void setValueAt(Object aValue, int row, int col) { 
      super.setValueAt(aValue, row, col); 
      p.putInt(VALUE_NAME, (int) aValue); 
     } 

     @Override 
     public Class<?> getColumnClass(int col) { 
      return getValueAt(0, col).getClass(); 
     } 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new TablePreference()::display); 
    } 
} 
相關問題