1

私の質問は、たとえば、数値が配列リストから取得される場合 JNumber.size()=10です。

    for(int a=0;a<JNumber.size();a++)
    {
         btnNumber= new JNumber(""+(a+1));
         btnNumber.setPreferredSize(new Dimension(20, 10));
         panel.setLayout(new GridLayout(10,10));
         panel.add(btnNumber, BorderLayout.SOUTH);
    }

それでは、ボタンがクリックされたときに番号を返す方法は?

出力:

番号2がクリックされます。

4

3 に答える 3

2

これは ActionListener で行うことができます。与えられたコードを使用すると、これはあなたの場合にうまくいくはずです:

数値だけではないテキストを表示したい場合は、ボタンを特定のテキストで初期化し、ボタンの actioncommand を実際の数値に設定します。(下記参照。)

btnNumber= new JNumber(""+(a+1));
btnNumber.setActionCommand(""+(a+1));    
btnNumber.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        JButton button = (JButton)evt.getSource();
        int num = Integer.parseInt(button.getActionCommand());
        System.out.println(num);
      }
    }); 
于 2012-11-20T18:51:16.347 に答える
1

これが役立つことを願っている小さな例です。基本的には、 にJButtons をJPanel追加ActionListenerし、 eachJButtonに追加JPanelJFrame、 に追加するだけです。ボタンをクリックした後、(使用のために @Pr0gr4mm3r に +1 を追加)println()の ActionCommand で実行されます。JButtonsetActionCommand()

ここに画像の説明を入力

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class ButtonsTest {

    public ButtonsTest() {
        initComponents();
    }

    private void initComponents() {

        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel(new GridLayout(2, 2));//create gridlayput to hold buttons

        ActionListener al = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                //display action command of jbutton
                String ac = ((JButton) ae.getSource()).getActionCommand();
                System.out.println(ac);
                //display full test in Jbutton
                //String text = ((JButton) ae.getSource()).getText();
                //System.out.println(text);
            }
        };

        for (int i = 0; i < 4; i++) {
            JButton b = new JButton("No: " + String.valueOf((i + 1)));
            b.setActionCommand(String.valueOf((i + 1)));
            b.addActionListener(al);
            panel.add(b);
        }

        frame.add(panel);

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //set L&F and create UI on EDT
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {

                try {//set L&F
                    for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                        if ("Nimbus".equals(info.getName())) {
                            UIManager.setLookAndFeel(info.getClassName());
                            break;
                        }
                    }
                } catch (Exception e) {
                    // If Nimbus is not available, you can set the GUI to another look and feel.
                }
                //create UI
                new ButtonsTest();
            }
        });
    }
}
于 2012-11-20T19:59:22.393 に答える
0

as として宣言btnNumberfinal、それに anActionListenerを追加します。

btnNumber.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    System.out.println("Number " + btnNumber.getText() + " is clicked");
  }
});
于 2012-11-20T18:44:40.343 に答える