今天写了一个用DefaultTableModel实现JTable的例子,结果发现在给
DefaultTableModel(Vector data,Vector columnNames)传入参数data时,
如果直接加普通对象(非Vecto类型的对象)
加入现有的data中,接着就将当前的这个data加入
DefaultTableModel(Vector data,Vector columnNames)构造方法中
会报类型强制转换的异常或者是内存溢出的错误
所以要想给DefaultTableModel(Vector data,Vector columnNames)
传入Vector类型的data,这个data必须里面添加的必须是一个Vector类型的数据
下面的代码中如果我们直接将"1","2",..直接加入data,使用这样的data构造DefaultTableModel
就会产生上面的错误。
因此下面的代码我们先使用了一个Vector类型的rowData添加非Vector类型的普通对象
接着将rowData加Vector类型的data中,最后才将封装了Vector类型的data加入DefaultTableModel中
package test;
import javax.swing.table.DefaultTableModel;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class JTableUpdate implements ActionListener{
private DefaultTableModel tableModel = null;
private JTable table = null;
private JScrollPane scrollPane = null;
private Vector rowData = null;
private Vector columnNames = null;
private Vector data = null;
private JButton button = null;
private JPanel panel = new JPanel();
private JPanel panel2 = new JPanel();
JFrame frame = null;
Container contentPane = null;
public JTableUpdate(){
//设置表头字段名称
columnNames = new Vector();
for(int i=0;i<4;i++){
columnNames.add("第" +(i+1) + "列");
}
rowData = new Vector();
data = new Vector();
//开始表中的数据是1,2,3,4
rowData.add("1");
rowData.add("2");
rowData.add("3");
rowData.add("4");
data.add(rowData);
//使用DefaultTableModel构建表格
tableModel = new DefaultTableModel(data,columnNames);
table = new JTable(tableModel);
scrollPane = new JScrollPane(table);
frame = new JFrame("JTableUpdate");
button = new JButton("更新数据");
button.addActionListener(this);
panel.add(button);
//把带按钮的panel和带表格的scrollPane加到panel2中
panel2.add(panel);
panel2.add(scrollPane);
contentPane = frame.getContentPane();
//添加有更新按钮和表格进入contentPane
contentPane.add(panel2);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args){
new JTableUpdate();
}
@Override
//点击更新按钮后,就更新表中数据
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
//清空vector中的数据
rowData.clear();
data.clear();
//假设要更新的数据是5,6,7,8
rowData.add("5");
rowData.add("6");
rowData.add("7");
rowData.add("8");
data.add(rowData);
//使用DefaultTableModel设置表格
tableModel.setDataVector(data, columnNames);
table.setModel(tableModel);
//更新UI
panel2.updateUI();
}
}
分享到:
相关推荐
- **通过`new`关键字**:创建新对象时,我们使用`new`关键字后面跟着类名和括号,括号内可以传递构造方法所需的参数。 - **通过子类的构造器**:子类在构造过程中,可以使用`super()`调用父类的构造方法,确保父类的...
当我们需要在创建对象时传入特定值来初始化对象,可以定义有参构造方法。例如: ```java public class Person { private String name; private int age; public Person(String name, int age) { // 有参构造...
带参数的构造方法允许我们在创建对象时传入特定的值,这些值可以用来定制对象的状态。例如,如果我们有一个`Person`类,可能需要提供姓名和年龄等信息来初始化一个新的`Person`对象。在这种情况下,我们可能会定义一...
解决这个问题的两种方式是:在父类中添加无参构造方法;或者在子类的构造方法中显式调用父类的构造方法(如`super(str);`),并将其放在构造方法的第一行。 **示例3**和**示例4**分别演示了对象初始化的顺序。在...
虽然本示例未提供MFC中传入参数的例子,但在实际开发中,可以通过继承MFC的CWnd或COleControl类来实现类似功能。 5. **C#不熟悉**:C#是一种现代的面向对象编程语言,广泛用于.NET框架。虽然本项目没有涉及C#的参数...
- **参数化构造器**:当需要在创建对象时传入特定值来初始化对象时,我们会使用参数化的构造器。 - **构造器链**:通过使用`this`关键字,一个构造器可以调用同一类中的另一个构造器,以简化代码并避免重复。 - **...
构造方法可以有参数,这样我们就可以根据传入的参数来定制对象的状态。例如: ```java public class Person { private String name; private int age; public Person() { // 默认构造方法 name = "Unknown"; ...
在C# MVC中,我们可以通过Castle Windsor来实现在控制器中带有参数的构造函数注入。 首先,我们需要了解什么是依赖注入。依赖注入是一种设计模式,其核心思想是将依赖关系从代码中解耦出来,使得组件之间可以独立地...
- 如果程序员没有显式定义构造方法,Java编译器会为每个类提供一个无参数的默认构造方法。 - 默认构造方法不执行任何操作,只是简单地完成对象的内存分配。 3. **带参数的构造方法**: - 为了在创建对象时传递...
和普通方法一样,Java中的构造方法也可以重载,即在同一个类中定义多个具有不同参数列表的构造方法。这样可以为创建对象提供多种初始化方式。例如: ```java class Student { String name; int age; Student() ...
创建对象时,可以通过构造方法传入参数,如下所示: ```java Teacher teacher = new Teacher(); // 使用默认构造方法 teacher.showInfo(); Teacher teacher1 = new Teacher("堂老师"); // 传入姓名,使用有参构造...
下面将详细解释如何在LabVIEW中调用外部EXE并传入参数,以及在EXE中如何解析这些参数。 1. **使用“运行系统命令”函数**: - 在LabVIEW中,可以使用“运行系统命令”函数(位于“字符串函数”->“系统”->“运行...
一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。构造方法可以重载,以参数的个数、类型、顺序。 使用构造方法的注意事项 ...
无参构造方法通常用于初始化对象的基本状态,而带有参数的构造方法允许在创建对象时传入特定的初始值。这称为构造函数的重载,即在同一个类中定义多个构造方法,每个方法具有不同的参数列表。这样可以根据需要提供...
5. **可有多个构造方法**:一个类可以定义多个构造方法,每个构造方法有不同的参数列表,这种现象称为重载(Overloading)。这样做的目的是为了提供不同的方式来创建对象,适应不同的初始化需求。 6. **默认构造器*...
Java虚拟机(JVM)根据传入的参数来决定调用哪个方法,这种方法使得代码更简洁、易读。 封装是面向对象编程的三大特性之一,它是将数据和操作数据的方法绑定在一起,对外隐藏实现细节的过程。在Java中,我们通过...
构造方法的重载(Overloading)是面向对象编程的一个重要特性,允许我们在同一个类中定义多个同名但参数列表不同的构造方法。这样可以根据传入的不同参数来执行不同的初始化逻辑。本话题将深入探讨如何使用构造方法...
Java语言是一种面向对象的编程语言,在面向对象编程中,对象的创建是通过构造方法来实现的。...在教学中,构造方法的研究有助于加深学生对面向对象程序设计的理解,同时提高其解决实际编程问题的能力。
当需要更复杂的初始化逻辑时,可以使用有参构造器,它们可以根据传入参数的不同值来创建不同状态的对象。此外,构造方法还可以链式调用,即一个构造方法调用另一个构造方法,以避免代码重复。 在面向对象设计原则中...