我有26个变量(case1,case2,...)
我有26个按钮。 (btnCase1,btnCase2等)
有没有办法做到这一点;

final JButton btn18 = new JButton("18");
    btn18.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            btn18.setText(Integer.toString(cases[18]));
            picked = cases[18];
            btn18.setEnabled(false);
            btnNext.doClick();
            casesPicked++;
        }
    });
    btn18.setBounds(785, 281, 100, 100);
    frame.getContentPane().add(btn18);

    final JButton btn19 = new JButton("19");
    btn19.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            btn19.setText(Integer.toString(cases[19]));
            picked = cases[19];
            btn19.setEnabled(false);
            btnNext.doClick();
            casesPicked++;
        }
    });


有没有办法这样说:

 final JButton btn18 = new JButton("18");
    btn18.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
             int i = 18
            btn[i].setText(Integer.toString(cases[i]));
            picked = cases[i];
            btn[i].setEnabled(false);
            btnNext.doClick();
            casesPicked++;
        }
    });


我需要稍后在代码中能够做到这一点,以回想已经选择了哪种情况。

这是我当前的完整代码。 http://pastebin.com/9Am3jMQ8可能是你们读过的最糟糕的代码。

最佳答案

您可以采用数组的值并将其用于变量中吗?


是。





我会为您的ActionListener创建一个类。您可以在其中精确定义所需的操作,并提供所需的数据。

class MyActionListener implements ActionListener
    {
    private final JButton button;
    private final JButton btnNext;
    private final int index;

    public MyActionListener(final int index,
                            final JButton button,
                            final JButton btnNext)
        {
        this.index = index;
        this.btnNext = btnNext;
        this.button = button;
        }

    @Override
    public void actionPerformed(final ActionEvent event)
        {
        picked = cases[i];
        this.button.setText( Integer.toString(cases[i]) );
        this.button.setEnabled(false);
        this.btnNext.doClick();
        casesPicked++;
        }

    }


然后您可以设置without repeating yourself

final JButton btn18 = new JButton("18");
btn18.addActionListener( new MyActionListener(18, btn18, btnNext) );
frame.getContentPane().add(btn18);

final JButton btn19 = new JButton("19");
btn19.addActionListener( new MyActionListener(19, btn19, btnNext) );
frame.getContentPane().add(btn19);


然后,您可以轻松地将按钮创建更改为使用循环:

for (int btnNum = 0 ; btnNum < 20 ; i += 1)
    {
    final JButton btn = new JButton( ""+btnNum );
    btn.addActionListener( new MyActionListener(btnNum, btn, btnNext) );
    frame.getContentPane().add(btn);
    }

07-25 22:34