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

如何生成带有多个按钮和递增标签的GUI?

古凌
2023-03-14

我正在尝试使用swing生成一个GUI,它创建了一个包含100个按钮的框架,每个按钮上都有一个从1到100的“标签”。

我所尝试的:

import javax.swing.*;
import java.awt.*;

public class ButtonScreen extends JFrame{
    JFrame frame = new JFrame();
    int rows=10;
    int cols=10;
    JButton[][] button = new JButton[rows][cols];
    JTextArea screen = new JTextArea();
    JPanel bpanel = new JPanel();
        public static void main(String[] args) {

        ButtonScreen bs = new ButtonScreen();
        bs.setVisible(true);
    }// end of main

   public ButtonScreen(){
    super("Welcome to the ButtonScreen Program!");
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    bpanel.setLayout(new GridLayout(rows,cols));


    for(int i=0;i<button.length;i++){
        for(int j=0;j<button.length;j++){
            
                button[i][j]=new JButton(""+i+j);
                bpanel.add(button[i][j]);
         }
    }
    add(bpanel);
   }//end of constructor
}//end of class

这很好,但它创建了带有“标签”(表示第26行的字符串参数)的按钮,而且这些标签不是一个字符串或一个整数,而是j计数器旁边i的dilusion。因此,经过一些更正后,我的第二次尝试是:

import java.awt.*;
import javax.swing.*;


public class LabArr extends JFrame{
    JFrame frame = new JFrame();
    int rows=10;
    int cols= 10;
    int i=0;
    JButton[][] button = new JButton[rows][cols];
    JLabel[] label = new JLabel[100];

    public static void main(String[] args) {
        LabArr la = new LabArr();
        la.setVisible(true);
    }//end of main 

    public LabArr(){
        super("title");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new GridLayout(rows,cols));

        for(i=0;i<label.length;i++){
            label[i]= new JLabel(toString(i));
        }

        for(int i=0;i<button.length;i++){
            for(int j=0;j<button.length;j++){
                button[i][j]= new JButton(""+label[j]);
              
               add(button[i][j]);
            }
        }


    }//end of constructor

    public String toString(int k){
        k=i;
        String s;
        s=""+k;
        return s;
    }
    
}//end of class 

我使用它的目标是创建一个JLabel对象数组,然后将每个JLabel元素与JButton数组中的一个匹配。

所以,首先我想知道setLayout和setDefaultClose操作方法指的是哪个对象。

其次,“toString方法是否需要引用我正在使用的行中的对象?”。最后,我错过了什么?

共有2个答案

诸葛利
2023-03-14

希望这能帮助您解决问题,请查看以下代码:


public class LabArr extends JFrame{
    JFrame frame = new JFrame();
    int rows=10;
    int cols= 10;
    int counter = 0;

    JButton[][] button = new JButton[rows][cols];
    JLabel[] label = new JLabel[rows*cols];

    public static void main(String[] args) {
        DemoApplication la = new DemoApplication();
        la.setVisible(true);
    }//end of main

    public LabArr(){
        super("title");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new GridLayout(rows,cols));

        for(int i=0;i<label.length;i++){
            label[i]= new JLabel(toString(i));
        }

        for(int i=0;i<button.length;i++){
            for(int j=0;j<button.length;j++){
                button[i][j]= new JButton(counter + "");

                add(button[i][j]);
                counter++;
            }
        }


    }//end of constructor

    public String toString(int k){

        String s;
        s=""+k;
        return s;
    }

}

您一直在使用标签toString()方法名称创建按钮。

訾雅畅
2023-03-14

这将创建一个包含1到100个按钮的单帧。

import javax.swing.*;
import java.awt.GridLayout;

public class HundredButtonGrid{

    public static void main(String[] args){
        JFrame frame = new JFrame("100 buttons");
        frame.setLayout(new GridLayout(10, 10));
        for(int i = 0; i<100; i++){
            frame.add( new JButton( "" + (i + 1) ) );
        }
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

    }

}

我已经解决了一些问题。

  • 我只使用1个索引,因为GridLayout负责x/y值
  • 我使用括号将索引添加到1,这样就不会以字符串连接它们
  • 我已经将默认的关闭操作设置为退出,您也可以让它执行其他操作。比如JFrame。DISPOSE_ON_CLOSE,使窗口消失,但不会终止应用程序
  • 我没有扩展JFrame,而是创建了一个单独的实例。在您的例子中,您已经扩展了JFrame,因此当您调用setLayout时,它将在您正在创建的实例上被调用。另一种说法是这样的。setLayout与setDefaultCloseOperation相同
 类似资料:
  • 我的app里有一些这样的按钮: 我正在尝试创建一个带有文本和图标的按钮。Android:DrawableLeft对我不起作用(也许会,但我不知道如何设置图标的最大高度)。 所以我创建了一个包含ImageView和TextView的LinearLayout,并使其像一个按钮一样运行: 我的新按钮正是我想要的(字体大小,图标和文本放置)。但它看起来不像我的默认按钮: 所以我试着改变新按钮的背景和文本颜

  • 我想包括使用FXML的图标和文本按钮。 我知道在FXML中,我可以用以下代码添加图像: 但我想知道如何将其与按钮代码合并:

  • 我有一个简单的JSF按钮: 我想创建png图像,这将是按钮的视觉体。我唯一要更改的是按钮的标题,我每次使用按钮的属性时都会设置该标题。这可能吗?现在,当我加载JSF页面时,我只看到没有标签的空按钮。 P.S1我得到这样的结果:

  • 我有两个s类型的。对于每个都有一个相应的,里面有一个。 我希望单击按钮会产生与单击标签相同的效果:检查相应的输入。 然而,这并没有发生。如下面的代码段所示,悬停并按下按钮确实会触发单选按钮中相应的样式更改,但单击操作不会选择输入,即使简单标签按预期工作。 我已经检查了s是s的合法子代。标签允许短语化内容,按钮是短语化内容,所以那里应该一切正常。 我还尝试将事件侦听器添加到两个按钮的单击事件中,并在

  • 问题内容: 我正在使用Appium自动化Android应用程序,我们需要单击带有动态ID的按钮。该按钮具有ID“ PROFILEBUTTON”或ID“ PROFILEMAILBUTTON”。除了坐标外,还有什么可以用来自动单击此按钮的? 问题答案: 为了鉴定与元素 动态ID 要么 PROFILEBUTTON 或 PROFILEMAILBUTTON 可以使用与以下通配符cssSelector: ^:

  • 你见过这种按钮吗?你知道如何着手创建它吗? Menai只是帮助我认识到这个按钮中必须有两个标签。左标签具有黑色背景色和白色文本填充色,而右标签具有银色背景色和红色文本填充色。 我想知道如何创建(Java或. fxml)和样式(CSS)按钮2标签在它类似于按钮提供的图像。