【问题标题】:how to add a specific number of buttons created in a loop如何添加在循环中创建的特定数量的按钮
【发布时间】:2020-12-28 12:22:15
【问题描述】:

我在将特定数量的按钮从我的 for 循环添加到我的 JPanel 时遇到问题,我知道如何添加所有按钮,但我只想添加 1-10 个(我还没有决定,让我们一起去吧10).'

这是我的课程,我只是声明我想要拥有的对象。

    private static int cID;
    private static Deck[] card;
    static ArrayList<JButton> buttonList = new ArrayList<JButton>();
    private JFrame f;
    private JPanel p1;
    private JButton button;
public boolean isEmpty() {
    return cID == 0;
}
public static void main(String[] args) {
    CustomDecks c = new CustomDecks();
    c.deckCreator();
}```

这是我的 for 循环,我在其中创建 420 个按钮并将它们命名为“card”+ i,其中 i 为 0 - 419,但是当我尝试将 card0 添加到我的面板时,它失败了,为什么?

private void deckCreator() {
    card = new Deck[25];
    new ArrayList<Cards> (cSet.cards);
    for(int i = 0; i < 420; i++) {
        button = new JButton();
        buttonList.add(button);
        button.setName("card" + i);
        f.add(button);
        p1.add(card0);
        }
    f.add(p1);
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.setVisible(true);
    f.setExtendedState(Frame.MAXIMIZED_BOTH);
    f.setUndecorated(true);
}
}
}

【问题讨论】:

标签: java swing for-loop


【解决方案1】:

我不确定您是否可以创建一个足够大的 JPanel 以容纳 420 JButtons

这是JButton GUI 的示例。

[

通常,您分别创建应用程序模型和视图。该模型由一个或多个普通 Java 类组成。视图从应用程序模型中读取,但不更新模型。

您的控制器类(ActionListener 类)更新应用程序模型并更新/重绘视图。

这种模式称为model / view / controller (MVC) 模式。

您可以在下面的示例代码中看到模型是在视图类构造函数中创建的。通常,您首先创建应用程序模型,然后创建应用程序视图。

这是完整的可运行代码。

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.UIManager;

public class JButtonScrollGUI {
    private JFrame frame;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    new JButtonScrollGUI();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

        });
    }
    
    private String[] greekAlphabet;

    public JButtonScrollGUI() {
        this.greekAlphabet = new String[] { "alpha", "beta", "gamma", "epsilon", "zeta" };
        initialize();
    }

    private void initialize() {
        frame = new JFrame();
        frame.setTitle("Application");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(createScrollPanel(), BorderLayout.CENTER);
        
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }
    
    private JPanel createScrollPanel() {
        JPanel panel = new JPanel(new BorderLayout());
        
        JPanel innerPanel = createButtonPanel();
        Dimension d = innerPanel.getPreferredSize();
        d.width += 50;
        d.height /= 2;
        panel.setPreferredSize(d);
        
        JScrollPane scrollPane = new JScrollPane(innerPanel);
        
        panel.add(scrollPane, BorderLayout.CENTER);
        return panel;
    }
    
    private JPanel createButtonPanel() {
        JPanel panel = new JPanel(new GridLayout(0, 3, 10, 10));
        panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        
        for (int i = 0; i < 20; i++) {
            JButton button1 = new JButton("Previous " + i);
            panel.add(button1);

            JComboBox<String> selectorBox = new JComboBox<>(greekAlphabet);
            panel.add(selectorBox);

            JButton button2 = new JButton("Next " + i);
            button2.setPreferredSize(button1.getPreferredSize());
            panel.add(button2);
        }
        
        return panel;
    }
    
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多