Java 使用循环(for)添加JButton没有任何作用

Java 使用循环(for)添加JButton没有任何作用,java,swing,for-loop,jpanel,jbutton,Java,Swing,For Loop,Jpanel,Jbutton,我试图使用“for”将各种jbutton添加到JPanel中,但不起作用。没有编译或其他错误。按钮就是不会出现 在一点上下文中,我在另一个类(“GestorFrigo”)中创建了一个ArryList,该类从数据库中获取数据,工作正常,数组拥有所有数据,从数组中获取数据没有问题 这是我的密码:提前谢谢 import gestor.GestorFrigo; import java.awt.EventQueue; import java.awt.event.ActionEvent; impo

我试图使用“for”将各种jbutton添加到JPanel中,但不起作用。没有编译或其他错误。按钮就是不会出现

在一点上下文中,我在另一个类(“GestorFrigo”)中创建了一个ArryList,该类从数据库中获取数据,工作正常,数组拥有所有数据,从数组中获取数据没有问题

这是我的密码:提前谢谢

    import gestor.GestorFrigo;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.util.ArrayList;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import javax.swing.JScrollBar;

@SuppressWarnings("serial")
public class VentanaInterior extends JFrame {

    private JPanel contentPane;
    private JButton btnPerfiles;
    private JButton btnAadir;
    private JButton btnRecetas;
    private JScrollBar scrollBar;

    private GestorFrigo frigo;

    private ArrayList<JButton> botones;
    private ArrayList<Object> boton;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    VentanaInterior frame = new VentanaInterior();
                    frame.setVisible(true);

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public VentanaInterior() {

        //Componentes       
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 556, 363);
        setLocationRelativeTo(null);
        setTitle("Tu Frigorífico Inteligente");
        setIconImage(new ImageIcon(getClass().getResource("img/logo.png")).getImage());

        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        btnPerfiles = new JButton("Perfiles");
        btnPerfiles.setBounds(0, 302, 96, 23);
        contentPane.add(btnPerfiles);

        btnAadir = new JButton("A\u00F1adir alimento");
        btnAadir.setBounds(369, 302, 148, 23);
        contentPane.add(btnAadir);

        btnRecetas = new JButton("Recetas");
        btnRecetas.setBounds(96, 302, 103, 23);
        contentPane.add(btnRecetas);

        scrollBar = new JScrollBar();
        scrollBar.setBounds(523, 0, 17, 325);
        contentPane.add(scrollBar);

        JButton btnQueso = new JButton();
        btnQueso.setBounds(24, 35, 62, 61);
        contentPane.add(btnQueso);

        frigo = new GestorFrigo(); //creamos el gestor
        String imagen = frigo.getArray().get(1).getImagen(); //cogemos la imagen asociada al alimento

        btnQueso.setIcon(new ImageIcon("src/img/"+imagen));

        for(int i=0;i<frigo.getArray().size();i++){

            JButton boton = new JButton();
            String imagen2 = frigo.getArray().get(i).getImagen();
            boton.setIcon(new ImageIcon("src/img/"+imagen2));
            contentPane.add(boton);

        }


    }
}
导入gestor.GestorFrigo;
导入java.awt.EventQueue;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.MouseListener;
导入java.util.ArrayList;
导入javax.swing.ImageIcon;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.border.EmptyBorder;
导入javax.swing.JButton;
导入javax.swing.JScrollBar;
@抑制警告(“串行”)
公共类VentanInterior扩展JFrame{
私有JPanel内容窗格;
私有JButton btnPerfiles;
私人杰布顿·巴纳迪尔;
私人JButton btnRecetas;
私有JScrollBar滚动条;
私人御用护身符;
私人ArrayList botones;
私人ArrayList boton;
/**
*启动应用程序。
*/
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
公开募捐{
试一试{
VentanaInterior框架=新的VentanaInterior();
frame.setVisible(true);
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
/**
*创建框架。
*/
公营部门{
//成分
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
立根(100100556363);
setLocationRelativeTo(空);
setTitle(“Tu Frigorífico Intelligente”);
setIconImage(新的图像图标(getClass().getResource(“img/logo.png”)).getImage());
contentPane=newjpanel();
setboorder(新的EmptyBorder(5,5,5,5));
setContentPane(contentPane);
contentPane.setLayout(null);
btnPerfiles=新的JButton(“Perfiles”);
btnPerfiles.立根(0,302,96,23);
contentPane.add(btnPerfiles);
btnAadir=新的JButton(“A\u00F1adir alimento”);
Btnadir.立根(369,302,148,23);
contentPane.add(btnAadir);
btnRecetas=新的按钮(“接收器”);
b减少挫折(96、302、103、23);
contentPane.add(btnRecetas);
scrollBar=新的JScrollBar();
滚动条.立根(523,0,17,325);
contentPane.add(滚动条);
JButton btnQueso=新JButton();
b.退步(24,35,62,61);
contentPane.add(btnQueso);
frigo=new GestorFrigo();//creamos el gestor
字符串imagen=frigo.getArray().get(1.getImagen();//cogemos la imagen asociada al-alimento
b查询设置图标(新图像图标(“src/img/”+imagen));

对于(inti=0;i不要使用空布局

默认情况下,按钮的默认大小为(0,0),因此无需绘制任何内容

使用布局管理器,可能是
GridLayout
,布局管理器将为您确定每个按钮的大小和位置


阅读Swing教程中的部分,了解更多信息和工作示例。

不要在循环中阻塞EDT;请参见和。1)Java GUI可能必须在多个平台上工作,在不同的屏幕分辨率和使用不同的PLAF。因此,它们不利于组件的精确放置。要组织组件以获得一个健壮的GUI,请使用布局管理器,或者与布局填充和边框一起使用…..2)
新图像图标(“src/img/”+imagen)
部署时,这些资源可能会成为。在这种情况下,必须通过
URL
而不是
文件来访问资源。请参阅标签,以获取形成
URL
的方法。非常感谢,我使用了AbsoluteLayout和.setBounds()设置按钮大小以适合我的图像。@user3638766,noooooo!!!不要使用AbsoluteLayout!!!使用布局管理器为您设置所有组件的大小/位置。