当前位置: 首页 > 面试题库 >

您如何将值加载到JTable中,以便在打开表单时显示以前的值?

夏侯承恩
2023-03-14
问题内容

如何将数组值加载到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);
}

I have included the main points of my code, hope it is sufficient to view!


问题答案:

对于少量数据,请考虑
java.util.prefs.Preferences.

您能为我提供一些使用示例吗?

Several examples are examined in the 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.”

这个最小的示例通过将先前保存的值添加到表中并覆盖表模型的setValueAt()实现以保存任何更改来更新单个单元格。编辑表,退出并重新启动以查看效果。

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);
    }
}


 类似资料:
  • 我需要一些帮助。是为了我的学校项目。仅供参考,我使用过的一些符号: 我已经包括了我的代码要点,希望足以查看!

  • 问题内容: 在我从事的一个项目中,我有几个不同的过程。我一直在代码编辑器中为该特定过程打开和关闭选项卡(java文件)。每个进程几乎总是使用相同的Java文件。 我想知道是否可以将打开的文件保存为工作集的一部分,以便我可以选择所需的工作集并打开需要使用的所有Java文件。当前,工作集只是将树设置为这些文件,但是我希望它也能打开我需要的文件。 我希望这是有道理的… 问题答案: Mylyn应该是您的答

  • 我试图传入一个JTable对象,它有DiscountID和Name列。我基本上是在尝试获取JTable a(折扣ID)中选择的第一列的一行,以及在循环中与JTable B中选择的记录相关的这组数据。 我现在的问题是,因为最初我必须将其设置为0,以避免出现但当我运行程序时,JTable B将显示与JTable A中的第一条记录相关的信息,而不需要我选择任何数据。我不想在JTTable B中显示任何信

  • 问题内容: 我正在做一个项目。它只是显示任务列表并向其中添加新任务。我有3个班级。一种用于添加,一种用于查看,一种用于保存所有信息(或者我认为)。 我的列表中已经有2个任务,它们显示正确。 问题是,当我 添加 新任务时,它不会在视图中显示。我尝试了许多可能的解决方案: 只需将项目添加到列表 创建一个新列表,其中包含旧列表中的项目并重建适配器; 使用沿着与附加()命令; 等等 这是我的代码,有点混乱

  • 这是所有新react开发人员的一个普遍问题,但不知何故,我无法理解可用解决方案背后的逻辑。我试图使用钩子更新状态变量,并尝试它读取更新后的值,但它总是返回以前的值而不是新值。下面是我代码执行的顺序。 单击按钮时,它执行以下代码并更新状态,但显示旧值。 控制台日志: 单击第一个按钮: 单击的ID:0 AccountID:0 单击的ID:1 AccountId:0 谁能告诉我这种行为背后的原因和如何解

  • 使用Struts 1.3 我有一个带有用户名、密码的登录表单,还有一个带有一些值的下拉列表,比如English、Deutsh等等。提交表单时,需要从下拉列表中保留最后一个值。 遵循代码示例。 JSP代码: 现在,此JSP代码生成以下下拉列表: struts配置。xml 问题: 现在的问题是,当我输入无效的用户名、密码并选择德语时。最后选择的语言应保持不变,并显示在下拉列表中。但下拉列表已初始化,值