java—在我添加了十几个jbutton之后,并不是所有jbutton都出现了我做错什么了?

u5rb5r59  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(327)

我想在jpanel中添加52个按钮。所有的都是actionlisteners。当我达到一定数量(13)并运行程序时,并不是所有的按钮都显示出来。例如,我添加了15个按钮,其中只有9或12个显示出来。有时是全部,但不是每次。
以下是其中两个jbutton的代码:

JButton button_one=new JButton();
    button_one.setPreferredSize(new Dimension(100,150));
    mainpanel.add(button_one);
    button_one.addActionListener(new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent button_1_picked){
            amount_of_cards_picked=amount_of_cards_picked+1;
            cardamountcheck();
            if(twocardspicked==true){
                userpick2=0;
                System.out.println(setoutcards[userpick2]);
                pairdetermination();
            }
            else if(twocardspicked==false){
                userpick1=0;
                System.out.println(setoutcards[userpick1]);

            }
        }
    });

    JButton button_two = new JButton();
    button_two.setPreferredSize(new Dimension(100, 150));
    mainpanel.add(button_two);
    button_two.addActionListener(new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent button_2_picked){
            amount_of_cards_picked=amount_of_cards_picked+1;
            cardamountcheck();
            if(twocardspicked==true){
                userpick2=1;
                System.out.println(setoutcards[userpick2]);
                pairdetermination();
            }
            else if(twocardspicked==false){
                userpick1=1;
                System.out.println(setoutcards[userpick1]);

            }
        }
    });

基本上,当单击其中一个按钮时,代码中的变量就会发生变化。这些按钮运行良好,工作方式正是我想要他们,但他们不都出现时,有超过13个,我需要52个。

11dmarpk

11dmarpk1#

我想在jpanel中添加52个按钮。所有的都是actionlisteners。
完成。我创建了一个显示52的gui JButtons . 我把它们做成了op的一半大小,这样gui就更适合于答案了。

使用 GridLayoutJPanel .
下面是完整的可运行代码。一个最小的可复制的例子。

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class FiftyTwoJButtonGUI implements Runnable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new FiftyTwoJButtonGUI());
    }

    @Override
    public void run() {
        JFrame frame = new JFrame("52 JButton GUI");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(createMainPanel(), BorderLayout.CENTER);

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

    private JPanel createMainPanel() {
        JPanel panel = new JPanel(new GridLayout(0, 13, 5, 5));
        panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

        CardListener listener = new CardListener();

        for (int i = 0; i < 52; i++) {
            JButton button = new JButton("" + (i + 1));
            button.addActionListener(listener);
            button.setPreferredSize(new Dimension(50, 75));
            panel.add(button);
        }

        return panel;
    }

    public class CardListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent event) {
            JButton button = (JButton) event.getSource();
            int cardNumber = Integer.valueOf(button.getText());
            System.out.println(cardNumber);
        }

    }

}

相关问题