Java 使用循环(for)添加JButton没有任何作用
我试图使用“for”将各种jbutton添加到JPanel中,但不起作用。没有编译或其他错误。按钮就是不会出现 在一点上下文中,我在另一个类(“GestorFrigo”)中创建了一个ArryList,该类从数据库中获取数据,工作正常,数组拥有所有数据,从数组中获取数据没有问题 这是我的密码:提前谢谢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
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!!!使用布局管理器为您设置所有组件的大小/位置。