1

私はいくつかの情報を挿入する JFrame を持っています。これらの情報は「マクロ」と呼ばれるオブジェクトに送信します。JButton を押すと、「マクロ」が「listaJFP」と呼ばれる ArrayList に挿入されます。名前「Murilo」、ID「1」などの最初の情報を入力してボタンを押すと、ArrayList は正しい情報を受け取りますが、「Joao」、ID「2」などの別の名前を挿入しようとすると、 ArrayList は、最初のインデックス [0] Joao, 2 と 2 番目のインデックス [1] Joao, 2 を受け取ります。[0]Murilo,1 と [1]Joao,2 の代わりに。この問題を探したところ、誰かがオブジェクトの参照について話しているのを見ました。つまり、オブジェクト「マクロ」の値を変更すると同時に、ArrayList の値が変更されたときです。誰か助けてくれませんか?注目してくれてありがとう !

これは私のクラス JFramePrincipal にあります:

Macro macro = new Macro();

private List<Macro> listaJFP = new ArrayList<Macro>();

これは私の JButton actionPerformed にあります:

listaJFP.add(macro);

JFrameTabela jfT = new JFrameTabela(listaJFP);

私はより多くのコードを入れようとします:

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

}

4

1 に答える 1

1

create a new MacroGUIからのすべての入力に対して確認しましたか

このような新しいマクロを作成する必要があります

public void actionPerformed(ActionEvent e){
    Macro macro = new Macro();
    listaJFP.add(macro);
}
// so it create a totally new Macro object everytime

編集:より多くのコードでOP編集後

最初の ActionPerformed 内に新しいマクロを作成する必要があります。これは、データを操作する場所であるためです。また、類似のタスクに対して 2 つの異なるアクションを実行するのはなぜですか?

于 2013-10-31T12:57:12.983 に答える