如何将值加载到 JTable 中,以便它在打开表单时显示以前的值?
How do you load values into a JTable so that it shows the previous values when the form is opened?
如何将数组值加载到 JTable
中,以便在打开表单时显示 table 的先前值?我不想将表单连接到任何数据库。
到目前为止,这是我的代码,它允许我在文本字段中输入文本,当我单击 "create customer" 按钮时,它会将值存储到 JTable
中。但是,如果我退出并重新打开表单,之前 table 中的数据就会消失。我做了一些研究,但似乎将 netbeans 连接到数据库是保存和检索数据的唯一方法。但是,我相信将数据存储到数组中也是可能的,但我不知道如何将数组中的值带入 table.
我需要一些帮助。这是为了我的学校项目。
仅供参考,我使用的一些符号: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);
}
我把我代码的要点都包含进去了,希望够看!
对于少量数据,考虑java.util.prefs.Preferences
。
Would you be able to provide me with some examples on how to use it?
在 Preferences API Overview and the example cited here (API and code). Alternatively, consider javax.jnlp.PersistenceService
, cited here、"for applications that are running in the restricted execution environment."
中检查了几个示例
这个最小的示例通过将先前保存的值添加到 table 并覆盖 table 模型的 setValueAt()
实现来更新单个单元格以保存任何更改。编辑table,退出重启看看效果。
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
*/
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);
}
}
如何将数组值加载到 JTable
中,以便在打开表单时显示 table 的先前值?我不想将表单连接到任何数据库。
到目前为止,这是我的代码,它允许我在文本字段中输入文本,当我单击 "create customer" 按钮时,它会将值存储到 JTable
中。但是,如果我退出并重新打开表单,之前 table 中的数据就会消失。我做了一些研究,但似乎将 netbeans 连接到数据库是保存和检索数据的唯一方法。但是,我相信将数据存储到数组中也是可能的,但我不知道如何将数组中的值带入 table.
我需要一些帮助。这是为了我的学校项目。
仅供参考,我使用的一些符号: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);
}
我把我代码的要点都包含进去了,希望够看!
对于少量数据,考虑java.util.prefs.Preferences
。
Would you be able to provide me with some examples on how to use it?
在 Preferences API Overview and the example cited here (API and code). Alternatively, consider javax.jnlp.PersistenceService
, cited here、"for applications that are running in the restricted execution environment."
这个最小的示例通过将先前保存的值添加到 table 并覆盖 table 模型的 setValueAt()
实现来更新单个单元格以保存任何更改。编辑table,退出重启看看效果。
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
*/
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);
}
}