gpt4 book ai didi

java - ArrayList add() 方法不起作用。无法添加另一个值并将其添加到 jTable

转载 作者:行者123 更新时间:2023-12-01 20:26:55 25 4
gpt4 key购买 nike

我的代码有问题。我目前正在制作一个在 ArrayList 上存储临时数据的项目。我已经创建了代码,但是当我测试它时,ArrayList 中的 add() 方法似乎不起作用。我在 jTable 上显示 ArrayList,但它始终返回空,即使 add() 方法给出成功通知。

我在这里阅读了另一种解决方案,但没有一个适合我的问题。这是我的代码。我有 3 类

Input.java

package latihan;

import com.sun.xml.internal.ws.developer.JAXWSProperties;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
*
* @author anang
*/
public class Input extends javax.swing.JFrame {
Latihan latihan = new Latihan();
/**
* Creates new form Input
*/
public Input() {
initComponents();
}

private void btnKirimActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String nik = txtNIK.getText();
String lap = txtLaporan.getText();

try {
latihan.addLaporan(nik,lap);
JOptionPane.showMessageDialog(null,"Berhasil");
Tabel t = new Tabel();
t.setVisible(true);
this.setVisible(false);
} catch (Exception e) {
JOptionPane.showMessageDialog(null,e);
}

}
public ArrayList<String[]> getLaporan(){
ArrayList<String[]> arr = latihan.getLaporan();
return arr;
}
}

第二课Latihan.java

package latihan;

import java.util.ArrayList;
import javax.swing.JOptionPane;

public class Latihan {
private ArrayList<String[]> lap = new ArrayList<String[]>();

public static void main(String[] args) {

}

public ArrayList<String[]> getLaporan(){
return this.lap;
}

public void addLaporan(String Nik, String Lap){
String[] data = new String[]{Nik,Lap};
JOptionPane.showMessageDialog(null,"Data yang diinputkan = "+Nik+" "+Lap, "Latihan.java",JOptionPane.INFORMATION_MESSAGE);
this.lap.add(data);
}

}

第三节课Tabel.java

package latihan;

import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
*
* @author anang
*/
public class Tabel extends javax.swing.JFrame {
//Input i = new Input();
private Input input;
public Tabel() {
initComponents();
addDataToTable();
}

private void btnTambahActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
input.setVisible(true);
this.setVisible(false);

}

public void addDataToTable(){
DefaultTableModel tbModel = (DefaultTableModel) jTable1.getModel();
tbModel.setRowCount(0);
ArrayList<String[]> arr = input.getLaporan();

Object rowData[] = new Object[2];
JOptionPane.showMessageDialog(null,"Jumlah data : "+arr.size());
for(int i=0;i<arr.size();i++){
JOptionPane.showMessageDialog(null,arr.get(0)[0]);
rowData[0] = arr.get(i)[0];
rowData[1] = arr.get(i)[1];
tbModel.addRow(rowData);
}
}
}

我的代码有什么问题吗?有人可以帮我吗?

谢谢

最佳答案

所以你的JOptionPane的原因未使用您的 ArrayList 中的值进行更新是因为你的ArrayList是空的。 add()方法工作正常,这是您的实现不正确。

addDataToTable()当您调用ArrayList<String[]> arr = input.getLaporan();时它将去获取 ArrayList存储在您的 Input Tabel 的实例的类实例(...拼写...)。 Input 的此实例您正在调用的实例与您创建的实例完全不同 Tabel例如,因为在你的 Tabel 中你实例化了一个新的类 Input 。因此ArrayList您正在检索的内容将是空白的,因为 Tabel 实例中没有任何地方已运行任何调用 add 方法的代码。

感到困惑吗?本质上,这是一个与您的堆栈以及如何调用类有关的问题:

要尝试展示同一类中的变量如何根据实例而有所不同,您可以运行以下示例:

import java.util.ArrayList;

public class MyListClass {

private ArrayList<String> list = new ArrayList<>();
private static ArrayList<String> staticList = new ArrayList<>();

public MyListClass(int instance) {
for(int i = 0; i < instance; i++) {
list.add(instance + ":" +i);
staticList.add(instance + ":" +i);
}
}

public ArrayList<String> getList() {
return list;
}

public ArrayList<String> getStaticListList() {
return staticList;
}

}

public class MyInstanceClass {

private int instance;
private MyListClass listClass;

public MyInstanceClass(int instance) {
this.instance = instance;
listClass = new MyListClass(instance);
}

public void showMeWhatYourListLooksLike() {
System.out.println(String.format("For instance %d, the list has the following info: %s", instance, listClass.getList().toString()));
}

public void showMeWhatYourStaticListLooksLike() {
System.out.println(String.format("For instance %d, the STATIC list has the following info: %s", instance, listClass.getStaticListList().toString()));
}


public void createAnotherInstance() {
MyInstanceClass anotherInstance = new MyInstanceClass(30);
anotherInstance.showMeWhatYourListLooksLike();
}

}

public class MyMainClass {

public static void main(String...args) {
MyInstanceClass myInstanceClass01 = new MyInstanceClass(1);
MyInstanceClass myInstanceClass05 = new MyInstanceClass(5);
MyInstanceClass myInstanceClass10 = new MyInstanceClass(10);

myInstanceClass01.showMeWhatYourListLooksLike();
myInstanceClass05.showMeWhatYourListLooksLike();
myInstanceClass10.showMeWhatYourListLooksLike();

myInstanceClass01.showMeWhatYourStaticListLooksLike();
myInstanceClass05.showMeWhatYourStaticListLooksLike();
myInstanceClass10.showMeWhatYourStaticListLooksLike();

myInstanceClass10.createAnotherInstance();
}

}

...请注意,对于每个实例,MyInstanceClass当您调用showMeWhatYourListLooksLike()时打印出的列表有所不同,但是调用 showMeWhatYourStaticListLooksLike() 时打印出的列表是一样的。那是因为static列表在所有实例之间共享 MyListClass (这样想……当某个东西是 static 时,只能有一个)。

...您还会注意到创建 MyInstanceClass 的另一个实例时会发生什么里面myInstanceClass10 .

所以要解决您眼前的问题。而不是创建一个新的 Input Tabel 中的对象,只需传递您的 Latihan实例化时对象 Tabel并直接从该对象调用列表。

public class Input extends javax.swing.JFrame {
Latihan latihan = new Latihan();

public Input() {
initComponents();
}

private void btnKirimActionPerformed(java.awt.event.ActionEvent evt) {
...
try {
...
Tabel t = new Tabel(latihan);
...
} catch (Exception e) {
JOptionPane.showMessageDialog(null,e);
}
}

}

public class Tabel extends javax.swing.JFrame {

public Tabel(Latihan latihan) {
...
addDataToTable(latihan);
}

public void addDataToTable(Latihan latihan){
...
ArrayList<String[]> arr = latihan.getLaporan();
...
}
}

关于java - ArrayList add() 方法不起作用。无法添加另一个值并将其添加到 jTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58913287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com