0

ユーザーが複数の選択肢を選択してノード配列に保存できるように、jradiobuttons をグループ化しませんでしたが、読み取りは 1 回だけです。コードの何が問題になっていますか? 教えてください

private String[] showGUIForNodeDeletion() {

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(map.size(), 1));
        ButtonGroup btnGrp = new ButtonGroup();
        final String nodes[] = new String[10];
        Set<String> keySet = map.keySet();

        for (String name : keySet) {

            btnRadio = new JRadioButton(name);
            btnRadio.setActionCommand(map.get(name).x + "," + map.get(name).y + "," + name);
                        //btnGrp.add(btnRadio);
            panel.add(btnRadio);
        }

        btnRadio.addActionListener(new ActionListener() {
            int x = 0;

            public void actionPerformed(ActionEvent e) {

                nodes[x] = ((JRadioButton) e.getSource()).getActionCommand();
                System.out.println("Node counting " + x);
                x++;
            }
        });

        if (keySet.isEmpty()) {
            JOptionPane.showMessageDialog(AnotherGuiSample.this, "Work Space is empty", "Error", JOptionPane.ERROR_MESSAGE);
        } else {
            JOptionPane.showMessageDialog(AnotherGuiSample.this, panel, "Select node to remove", JOptionPane.INFORMATION_MESSAGE);
        }
        for(int x = 0; x < nodes.length; x++ )
        System.out.println("node is " + nodes[x]);

        return nodes;
    }
4

1 に答える 1

2

for ループ コードは次のようになります。

アップデート

Set<String> rbSet = new TreeSet<String>();
for (String name : keySet) {

    btnRadio = new JRadioButton(name);
    btnRadio.setActionCommand(map.get(name).x + "," + map.get(name).y + "," + name);
    btnRadio.addActionListener( new ActionListener()
    {
        public void actionPerformed(ActionEvent evt)
        {
            JRadioButton obj = (JRadioButton)evt.getSource();
            if (obj.isSelected())
            {
                rbSet.add(obj.getActionCommand());
            }
            else 
            {
                rbSet.remove(obj.getActionCommand());
            }
        }
    });
    panel.add(btnRadio);
}
int counter = 0 ;
for (String action : rbSet )
{
    nodes[counter++] = action;
}

何が起こっていたActionListenerのか、for ループの後に作成したため、for ループで作成された最後のオブジェクトに登録していました。そのため、作成されて に追加された latJRaioButtonオブジェクトに対してのみ発火していましたJPanel。ループ内で作成されたActionListenerそれぞれの for ループに登録する必要があります。JRadioButtonこれにより、に追加するActionEventたびに が起動します。JRadioButtonJPanel

于 2013-03-24T10:00:46.343 に答える