for循环添加swing按钮组件



import javax.swing.*;
import java.awt.*;
import javax.swing.table.*;
import java.util.*;
import java.awt.event.*;
import java.net.URL;
import java.awt.Graphics;


import java.io.*;
import javax.imageio.*;


//商店类
public class w18{
    
        JFrame j=new JFrame();
        Container c=j.getContentPane();
    
    
    public w18(){
    
        
        JButton a[]=new JButton[24];
        JPanel j1=new JPanel();
        JPanel j2=new JPanel();
        j2.setLayout(new GridLayout(12,8,5,5));
        for(int i=0;i<24;i++){
            //j2.add(a[i]);
        }
        JScrollPane s=new JScrollPane(j2);
        
        //Icon dj2=new ImageIcon("dj2.png");
        //dj[0].setIcon(dj2);
        
        JButton w1=new JButton(" 装  备 ");
        JButton w2=new JButton(" 药  剂 ");
        JButton w3=new JButton(" 材  料 ");
        JButton w4=new JButton(" 道  具 ");
        
        
        //创建滚动面板,给文本域添加滚动条
        
        j1.setBounds(0,0,300,50);
        
        s.setBounds(0,50,275,350);
        
        j1.add(w1);
        j1.add(w2);
        j1.add(w3);
        j1.add(w4);
        s.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);//左右
        s.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);//上下
        
        j.add(s);
        
        j.add(j1);
        
    
        
        
        
            //列  行
        
        
        j.setLocationRelativeTo(null);//窗体居中
    
        j.setSize(300,475);
        j.setDefaultCloseOperation(2);//窗体关闭方式
        j.setResizable(false);//用户禁止拉伸窗体
        j.setLayout(null);
        
        
            w1.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
          
             }
         });
         
             w2.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
         
            }
            
        
             
         });
         
             w3.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
         
            }
            
        
             
         });
         
             w4.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
       
            }
            
        
             
         });
    
        
    }
public static void main(String[]args){
        new w18();
    }//主方法

}



     

for循环这里,编译没问题,运行报错,求指点

  • 参考GPT的内容和自己的思路:

  • 在上面的代码中,for循环注释掉了,也就是没有实例化24个JButton,然后尝试将这些按钮添加到j2面板中,这样会导致空指针异常。因此,需要在for循环中实例化JButton并将其添加到j2面板中,如下所示:

JButton a[]=new JButton[24];
JPanel j1=new JPanel();
JPanel j2=new JPanel();
j2.setLayout(new GridLayout(12,8,5,5));
for(int i=0;i<24;i++){
    a[i] = new JButton(); // 实例化JButton
    j2.add(a[i]); // 将JButton添加到j2面板中
}
JScrollPane s=new JScrollPane(j2);


通过以上修改,你可以在j2面板中添加24个空按钮。

报什么错呢?是不是报:NullPointerException?

JButton数组只是定义了24个JButton对象,但没有调用对象的Create之类的创建函数,没有产生对象的句柄

在创建24个按钮的循环中,没有实例化按钮并添加到面板中,导致24个按钮没有显示。需要将注释掉的代码解除注释,并将按钮实例化添加到面板中。

此外,代码中没有实现按钮的功能,需要在每个按钮的ActionListener中添加具体的代码实现。