当前位置: 首页 > 知识库问答 >
问题:

我将如何使按钮是动态的取决于按钮的数量?

勾长卿
2023-03-14
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
    
public class ButtonGrid{
    public static void main(String[] args) {
        int count = 26, i;
        JFrame frame = new JFrame("Title");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(1100,900);
        frame.setVisible(true);
        if (count >= 1 && count <= 30) {
            int rowcount = count / 10;
            frame.setLayout(new GridLayout(rowcount,10));
        
            for (i = 1; i <= count; i++) {
                frame.add(new JButton(""+i+""));
            }
        }
    }
}

我该怎么解决呢?

共有1个答案

郭俊拔
2023-03-14

我制作了一个演示如何创建动态按钮jpanel的小GUI。

以下是初始状态:

下面是输入5个按钮后的状态:

我创建了一个JFrame和两个JPanels。输入JPanel使用BorderLayoutFlowLayout的组合来创建布局。按钮JPanel使用GridLayout

下面是完整的可运行代码。

import java.awt.BorderLayout;
import java.awt.FlowLayout;
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.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class ButtonGrid implements Runnable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new ButtonGrid());
    }
    
    private JFrame frame;
    
    private JPanel buttonPanel;
    private JPanel inputPanel;
    
    private JTextField buttonCountField;

    @Override
    public void run() {
        frame = new JFrame("Button Grid");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        this.inputPanel = createInputPanel();
        frame.add(inputPanel, BorderLayout.BEFORE_FIRST_LINE);
        this.buttonPanel = createButtonPanel(30);
        frame.add(buttonPanel, BorderLayout.CENTER);
        
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }
    
    private JPanel createInputPanel() {
        JPanel panel = new JPanel(new BorderLayout());
        panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        
        JPanel inputPanel = new JPanel(new FlowLayout());
        inputPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        
        JLabel label = new JLabel("How many buttons? (1 - 30):");
        inputPanel.add(label);
        
        buttonCountField = new JTextField(5);
        inputPanel.add(buttonCountField);
        
        panel.add(inputPanel, BorderLayout.BEFORE_FIRST_LINE);
        
        JButton button = new JButton("Submit");
        panel.add(button, BorderLayout.AFTER_LAST_LINE);
        
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                int buttonCount = valueOf(buttonCountField.getText().trim());
                if (buttonCount >= 1 && buttonCount <= 30) {
                    createButtons(buttonPanel, buttonCount);
                }
            }
            
            private int valueOf(String number) {
                try {
                    return Integer.valueOf(number);
                } catch (NumberFormatException e) {
                    return -1;
                }
            }
        });
        
        return panel;
    }
    
    private JPanel createButtonPanel(int count) {
        JPanel panel = new JPanel(new GridLayout(0, 10, 5, 5));
        panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        createButtons(panel, count);
        
        return panel;
    }
    
    public void createButtons(JPanel panel, int count) {
        panel.removeAll();
        
        for (int index = 0; index < count; index++) {
            JButton button = new JButton(Integer.toString(index + 1));
            panel.add(button);
        }
        
        panel.validate();
        panel.repaint();
    }

}
 类似资料:
  • 我有一个按钮和一个文本框。当我在textbox中放置一个值并单击此按钮时,将创建一个新按钮,该值填充在textbox中,但我希望当我再次单击Button1时,应该还有一个按钮,或者我们可以说如何移动上一个按钮的位置? 请帮我解决这个问题。提前谢了。

  • 我有两项活动。其中一个有碎片<从这个片段中,我可以转到另一个活动,但单击“主页”按钮,它会转到上一个活动,而不是转到上一个活动的片段。 图像

  • 我以编程方式生成了许多按钮(一些按钮用于增加值,而另一些按钮用于减少值),当它们调整的值达到最大值或最小值时,我会禁用这些按钮。(即,当达到最大值时,“增加”按钮被禁用,而当达到最小值时,“减少”按钮被禁用。)除了禁用,我还将按钮状态设置为“按下”,以直观地指示已达到极限值,并且按钮不再工作。 我的按钮onClickListener的'增加'按钮看起来像这样: ClickListeners上相应的

  • 我正在使用WPF构建一个包含多个按钮的windows窗体应用程序。我想通知用户,他应该加载一个pdf,然后他可以按下其他按钮,通过使加载pdf按钮闪烁/振动,如果用户点击其他地方,没有pdf加载。 例如,如果在Microsoft Paint打开时尝试单击编辑颜色框之外的任何地方,则会发生类似的行为。(见附件gif) 有人有主意吗?

  • 我有一些像这样的标记: 我需要在中插入一个锚标记,并应用“按钮ID”作为,但是我不能以父TD的值为目标。我一直没定义。

  • 我目前用JavaFX制作了一个表单。我总是按一个按钮,我调用“addAnswer()”-方法。在其中,我创建了一个RadioButton、一个Label和一个deleteButton,我将它们捆绑在一个HBox中。我把所有的HBox都装在一个vBox中。现在的问题是删除按钮。我想深入研究点击按钮的HBox。 这是我的代码: 我在上面试过这个,但我意识到,所有的delAnswers-Button都有