Java 在ArrayList中插入具有不同值的对象

Java 在ArrayList中插入具有不同值的对象,java,object,arraylist,Java,Object,Arraylist,我有一个JFrame,我在其中插入一些信息,这些信息我发送给一个叫做“宏”的对象。当我点击一个JButton时,“macro”被插入到一个名为“listaJFP”的ArrayList中。当我输入第一个信息如名称“Murilo”,id“1”并点击按钮时,我的ArrayList接收到正确的信息,但当我尝试插入另一个名称如“Joao”,id“2”时,我的ArrayList接收到第一个索引[0]Joao,2和第二个索引[1]Joao,2。而不是[0]Murilo,1和[1]Joao,2。我寻找这个问题,

我有一个JFrame,我在其中插入一些信息,这些信息我发送给一个叫做“宏”的对象。当我点击一个JButton时,“macro”被插入到一个名为“listaJFP”的ArrayList中。当我输入第一个信息如名称“Murilo”,id“1”并点击按钮时,我的ArrayList接收到正确的信息,但当我尝试插入另一个名称如“Joao”,id“2”时,我的ArrayList接收到第一个索引[0]Joao,2和第二个索引[1]Joao,2。而不是[0]Murilo,1和[1]Joao,2。我寻找这个问题,我看到有人在谈论对象的引用,换句话说,当我更改对象“macro”的值时,同时更改ArrayList的值。有人能帮我吗?谢谢你的关注

这是我的班级JFramePrincipal:

Macro macro = new Macro();

private List<Macro> listaJFP = new ArrayList<Macro>();
我将尝试添加更多代码:

public class JFramePrincipal extends javax.swing.JFrame {

private List<Macro> listaJFP = new ArrayList<Macro>();
Macro macro = new Macro();
String[] arrayNodeName;
String[] listaVelocidade = new String[]{"1024", "1984"};
String[] listaSlot = new String[]{"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"};
String[] listaModule86x0 = new String[]{"0", "1"};
String[] listaModule8609 = new String[]{"3", "4"};
String[] listaPort = new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"};
String[] listaPortFeGe = new String[]{"0", "1", "2", "3", "4", "5", "6", "7"};
String[] nodeType = new String[]{"8609", "8630", "8660"};

 private void jButtonGerarMacroActionPerformed(java.awt.event.ActionEvent evt) {                                                  
    try {
        if (jCheckBoxFSP.isSelected() == true) {
            macro.setVpnName(jFormattedTextFieldFSP.getValue().toString());
        } else if (jCheckBoxSP.isSelected() == true) {
            macro.setVpnName(jFormattedTextFieldSP.getValue().toString());
        }

        macro.velocidade = jComboBoxVelocidade.getSelectedItem().toString();

        if (jTextVLAN.isEnabled() == true) {
            int vlanInt;
            boolean ok = false;
            vlanInt = Integer.parseInt(jTextVLAN.getText());
            do {
                if (vlanInt >= 1 && vlanInt <= 4094) {
                    macro.vlan = jTextVLAN.getText();
                    gerar();
                    jButtonExecutarMacro.setEnabled(true);
                } else {
                    JOptionPane.showMessageDialog(null, "VLAN deve ser maior do que 0 e menor do que 4094", "Mensagem", JOptionPane.ERROR_MESSAGE);
                    jTextVLAN.grabFocus();
                    jButtonExecutarMacro.setEnabled(false);
                }
            } while (ok);
        } else {
            macro.vlan = null;
            gerar();
            jButtonExecutarMacro.setEnabled(true);
            jButtonGerarMacro.setEnabled(false);
        }


private void jButtonExibirResultadoActionPerformed(java.awt.event.ActionEvent evt) {                                                       
    if(jCheckBoxE1.isSelected() == true){
        listaJFP.add(macro);
        Macro macro = new Macro();
        JFrameTabela jfT = new JFrameTabela(listaJFP);
公共类JFramePrincipal扩展了javax.swing.JFrame{
private List listaJFP=new ArrayList();
宏=新宏();
字符串[]arrayNodeName;
字符串[]listaVelocidade=新字符串[]{“1024”,“1984”};
String[]listaSlot=新字符串[]{“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”};
字符串[]listaModule86x0=新字符串[]{“0”,“1”};
字符串[]listaModule8609=新字符串[]{“3”,“4”};
字符串[]listaPort=新字符串[]{“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”、“15”、“16”、“17”、“18”、“19”、“20”、“21”、“22”、“23”};
String[]listaPortFeGe=新字符串[]{“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”};
字符串[]节点类型=新字符串[]{“8609”、“8630”、“8660”};
私有void jButtonGerarMacroActionPerformed(java.awt.event.ActionEvent evt){
试一试{
if(jCheckBoxFSP.isSelected()==true){
macro.setVpnName(jFormattedTextFieldFSP.getValue().toString());
}else if(jCheckBoxSP.isSelected()==true){
macro.setVpnName(jFormattedTextFieldSP.getValue().toString());
}
macro.velocidade=jcomboxvelocidade.getSelectedItem().toString();
if(jTextVLAN.isEnabled()==true){
int-vlanInt;
布尔ok=false;
vlanInt=Integer.parseInt(jTextVLAN.getText());
做{

如果(vlanInt>=1&&vlanInt您是否确保为GUI中的每个输入创建一个新宏

您必须创建这样的新宏

public void actionPerformed(ActionEvent e){
    Macro macro = new Macro();
    listaJFP.add(macro);
}
// so it create a totally new Macro object everytime
编辑:操作后使用更多代码进行编辑


您需要在执行的第一个操作的内部创建一个新宏,因为这是您处理数据的地方。为什么要为一个类似的任务执行两个不同的操作?

您是否确保为GUI中的每个输入创建一个新宏

您必须创建这样的新宏

public void actionPerformed(ActionEvent e){
    Macro macro = new Macro();
    listaJFP.add(macro);
}
// so it create a totally new Macro object everytime
编辑:操作后使用更多代码进行编辑



您需要在执行的第一个操作的内部创建一个新的宏,因为这是您处理数据的地方。为什么要为一个类似的任务执行两个不同的操作?

似乎您忘记了在某个时候复制对象。但是如果没有GUI代码,很难判断在哪里。如果您想更快地得到答案,请提供一个。您是否确保为GUI中的每个输入创建一个
新宏
。可能是您每次都在添加相同的宏。否。我不是每次都创建一个新宏。但我的问题是,我应该将这个新宏放在哪里?在类的开头?在listaJFP之后。添加(宏);?在哪里?将它放在
actionPerformed()中
似乎您在某个时候忘记了复制对象。但是如果没有GUI代码,很难判断在哪里。如果您想更快地得到答案,请提供一个。您是否确保为GUI的每个输入创建一个
新宏
。可能是您每次都添加相同的宏。不,我不是每次都创建一个新宏.但我的问题是,我应该把这个新宏放在哪里?在类的开头?在listaJFP.add(Macro)之后;在哪里?当我放Macro Macro=new Macro()时,把它放在你的
actionPerformed();在添加之前,我在列表中插入一个空值。需要查看更多代码。很难说您想做什么。如果您将
添加
放在
新宏
之前,则
添加(宏)中的
在哪里
来自。这是毫无意义的。需要更多相关的代码,才能让任何人了解到底发生了什么。我们都可以猜测,但我们可能会遇到这样的情况,修复一个错误会导致另一个错误。你需要在执行的第一个操作中创建一个新的宏,因为这是你要做的I操作数据。为什么要为一个类似的任务执行两个不同的操作?我执行宏宏=新宏();在执行的第一个操作开始时?还是在最后?当我放置宏宏=新宏()时;在添加之前,我在列表中插入一个空值。需要查看更多代码。很难说您想做什么。如果您将
添加
放在
新宏
之前,则
添加(宏)中的
在哪里
来自。这是毫无意义的。需要更多相关的代码,才能让任何人了解到底发生了什么。我们都可以猜测,但我们可能会遇到这样的情况,修复一个错误会导致另一个错误。你需要在执行的第一个操作中创建一个新的宏,因为这是你要做的操作数据。为什么要为一个类似的任务执行两个不同的操作?我执行宏宏=新宏();在执行的第一个操作开始时?还是在最后?