簡體   English   中英

為多個Jbutton提供相同的actionListener

[英]Giving mulitple Jbuttons the same actionListener

我已經編寫了一個2x2x2的rubiks多維數據集求解器,我想讓用戶更好地輸入他們的多維數據集,目前他們輸入的數字已分配給多維數據集的顏色。 例如0可以代表白色,1可以代表黃色,等等。我一直在研究一個GUI,它是由按鈕組成的2d立方體,單擊它們時會在一系列顏色上循環變化。 到目前為止,這是我所擁有的,但是我無法將actionListener應用於所有按鈕。

public static void main(String[] args) {

    final int WINDOW_HEIGHT = 500;
    final int WINDOW_WIDTH = 700;

    //create a window
    window.setTitle("First Window");
    window.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setVisible(true);
    window.setResizable(false);


        allButtons();
}

private static void allButtons(){
    panel.setLayout(null);
    window.add(panel);


     final JButton button[]=new JButton[23];
        for(int i=0;i<button.length;i++){
            button[i] = new JButton();
        }

        panel.add(button[0]);
        button[0].setBounds(30, 30, 60, 60);
        final Color[] ColorArray = {Color.WHITE, Color.ORANGE,Color.GREEN,Color.RED,Color.BLUE,Color.YELLOW};

        button[0].addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e){
                final int stickerNum = 24;

                if(stickerNum <= 3){
                    for(Color i : ColorArray){
                    button[0].setBackground(i);
                    cube[Side][0] = 0;
                    }
                }
            }
        });
}

只需將ActionListener實例分配給變量,然后將其添加到循環中的JButtons中即可。

public static void main(String[] args) {

    final int WINDOW_HEIGHT = 500;
    final int WINDOW_WIDTH = 700;

    //create a window
    window.setTitle("First Window");
    window.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setVisible(true);
    window.setResizable(false);

    allButtons();
}

private static void allButtons(){
    panel.setLayout(null);
    window.add(panel);

    final JButton button[]=new JButton[23];
    for(int i=0;i<button.length;i++){
        button[i] = new JButton();
    }

    panel.add(button[0]);
    button[0].setBounds(30, 30, 60, 60);
    final Color[] ColorArray = {Color.WHITE, Color.ORANGE,Color.GREEN,Color.RED,Color.BLUE,Color.YELLOW};

    ActionListener actionListener = new ActionListener(){

        public void actionPerformed(ActionEvent e){
            final int stickerNum = 24;

            if(stickerNum <= 3){
                for(Color i : ColorArray){
                    button[0].setBackground(i);
                    cube[Side][0] = 0;
                }
            }
        }
    };

    for(int i=0;i<button.length;i++){
        button[i].addActionListener( actionListener);
    }
}

您可以像下面這樣創建一個ButtonListener類來存儲索引。 然后,您只需將偵聽器的新實例添加到每個按鈕即可。

public static void main(String[] args) {

    final int WINDOW_HEIGHT = 500;
    final int WINDOW_WIDTH = 700;

    //create a window
    window.setTitle("First Window");
    window.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setVisible(true);
    window.setResizable(false);


    allButtons();
}

private static void allButtons() {
    panel.setLayout(null);
    window.add(panel);


    final JButton button[]=new JButton[23];
    for(int i=0;i<button.length;i++){
        button[i] = new JButton();
    }

    panel.add(button[0]);
    button[0].setBounds(30, 30, 60, 60);
    final Color[] ColorArray = {Color.WHITE, Color.ORANGE,Color.GREEN,Color.RED,Color.BLUE,Color.YELLOW};

    class ButtonListener implements ActionListener {
        private int buttonIndex;

        public ButtonListener(int buttonIndex) {
            this.buttonIndex = buttonIndex;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            final int stickerNum = 24;

            if(stickerNum <= 3){
                for(Color i : ColorArray){
                button[buttonIndex].setBackground(i);
                cube[Side][0] = 0;
                }
            }
        }
    }

    for(int i = 0; i < button.length; i++) {
        button[i].addActionListener(new ButtonListener(i));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM