Foro sobre Java SE > Añadir JScrollbar a JPanel con FlowLayout
/**
<p>
@author Carlos Hoces
*/
public class NewJFrame extends javax.swing.JFrame {
/** Creates new form NewJFrame */
public NewJFrame() {
initComponents();
}
/** This method is called from within the constructor to
initialize the form.
WARNING: Do NOT modify this code. The content of this method is
always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jPanel1 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
jButton4 = new javax.swing.JButton();
jButton5 = new javax.swing.JButton();
jButton6 = new javax.swing.JButton();
jButton7 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText("jButton1");
jPanel1.add(jButton1);
jButton2.setText("jButton1");
jPanel1.add(jButton2);
jButton3.setText("jButton1");
jPanel1.add(jButton3);
jButton4.setText("jButton1");
jPanel1.add(jButton4);
jButton5.setText("jButton1");
jPanel1.add(jButton5);
jButton6.setText("jButton1");
jPanel1.add(jButton6);
jButton7.setText("jButton1");
jPanel1.add(jButton7);
jScrollPane1.setViewportView(jPanel1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 278, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}// </editor-fold>
/**
@param args the command line arguments
*/
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new NewJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
private javax.swing.JButton jButton5;
private javax.swing.JButton jButton6;
private javax.swing.JButton jButton7;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
// End of variables declaration
}
Hola:
Gracias por la respuesta pero no me funciona, he intentado adaptarlo a mi codigo pero sigo sin tener scroll, la verdad es que ya no se lo que probar, si se te ocurre algo mas estare muy agradecido, lo he probado haciendo esto puesto lo demas es igual que en mi codigo:
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 278, Short.MAX_VALUE)
.addContainerGap())
);
Un saludo y muchisimas gracias por la respuesta.
Lo raro sería que te funcionase con solo copiar y pegar una parte del código, así sin más ni más.
Si ejecutas mi código verás que un JPanel con un flow layout funciona perfectamente dentro de un JScrollPane, que era lo que preguntabas.
Evidentemente, solo es un test para probar que es posible, no una solución completa a tu diseño.
Lo que sí veo es que declaras varios layout null en diversas partes del código (una fuente de problemas), así como declarar un JScrollPane dentro de un JPanel (que no sirve para nada).
Tu código no es compilable ni ejecutable, y pretender depurar componentes de Swing "a ojo" es una manera sencilla de quedarse ciego.
Te sugiero que publiques un código compilable y ejecutable, al estilo del mío, que muestre exactamente el problema que tienes; el que realmente tienes con tu diseño, que no es un asunto de flow layout.
Hola:
La verdad es que ya sabia que un jpanel con flow layout funciona perfectamente dentro de un jscrollpane, lo tengo funcionando en otros proyectos, no me referia a eso, me referia a que este jpanel con flowlayout no funciona y lo tengo todo igual que en otros proyectos y no se donde esta el fallo, esa era mi pregunta.
Lo de los layouts null me estoy enterando gracias a poner este mensaje en este y en otros foros que es una fuente de problemas cosa que no sabia ya que como pongo en el primer mensaje soy bastante novato en java y que a partir de ahora intentare evitar, gracias por la advertencia. Es lo bueno de los foros, que aprendes cosas nuevas gracias a tus dudas o las de los demas, por que aunque no haya puesto nada en todo este tiempo (mas que nada por que no me considero preparado aun) sigo este foro y esta pagina, por eso puse este mensaje aqui, al igual que en las otras que lo puse que tambien las sigo para poco a poco ir siendo un buen programador java y cuando pueda da por hecho que ayudare a los demas.
Lo del scrollpanel dentro de un jpanel que no sirve para nada es por que me dijeron en otro foro que asi funcionaria, lo pobre y no funciono y no me acorde de quitarlo, gracias por decirmelo.
Lo de crear un codigo compilable y ejecutable esta mal por que ya lo he intentado y si lo creo funciona todo perfectamente, ya que creo algo como lo que tu has hecho, pero luego por mucho que haga en mi codigo sigue sin aparecer el scroll, por eso me gustaria arreglar este codigo no el otro que cree compilable y ejecutable. La verdad es que el problema no es del flowlayout y eso ya lo se como te he dicho antes, pero lo que no se es cual es mi problema si no no estaria aqui y en otros foros preguntando, este mismo programa lo tengo funcionando con un gridlayout sin problemas pero no es lo que quiero por que si pongo menos botones de la cuenta me los hace todos mas grande por eso lo del flowlayout pero bueno si consigo hacerlo funcionar con el flowlayout y el scroll bien y sino lo seguire haciendo con el gridlayout.
Gracias por contestar y seguire buscando y intentando solucionarlo, si lo consigo ya pondre mi solucion por aqui para que todos la veais y si alguien puede ayudarme le estare muy agradecido.
Hola:
Gracias por todo, ya tengo funcionando mi codigo, simplemente lo borre todo y lo hice todo de nuevo por que ya me estaba volviendo loco y ahora todo funciona perfectamente, este es mi codigo nuevo:
//Creamos el panel que contendra los botones de cada producto diferente
package com.foolsrecords.tpv.tablaproductos.vista;
//Hacemos todas las importaciones necesarias
import com.foolsrecords.tpv.modelo.Producto;
import com.foolsrecords.tpv.modelo.eventos.ControladorEventListener;
import com.foolsrecords.tpv.modelo.eventos.ProductoSeleccionadoListener;
import com.foolsrecords.tpv.servicios.ServicioItemVenta;
import com.foolsrecords.tpv.servicios.ServicioProducto;
import com.foolsrecords.tpv.vista.componentes.JProductoButton;
import java.awt.Color;
import java.awt.Image;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
//Creamos la clase principal
public class TablaProductos extends javax.swing.JPanel {
//Creamos las variables y objetos necesarios para poder trabajar
private Map<Integer, JProductoButton> mapaProductos;
ProductoSeleccionadoListener objEven = new ProductoSeleccionadoListener(this);
ServicioItemVenta servItemVenta = new ServicioItemVenta();
//Creamos el constructor
public TablaProductos() {
initComponents();
inicializarPanelProductos(0); //con los subproductos de tipo 1
}
//Inicializamos el panel de productos y le pasamos la familia de los productos como parametro para mostrar los botones correctos
public void inicializarPanelProductos(int tipoProducto) {
//Creamos un objeto para conectar con la base de datos a traves de la clase servicioproducto
ServicioProducto servicio = new ServicioProducto();
//Conectamos con la base de datos y cojemos los productos de la familia enviada como parametro
List<Producto> productos = servicio.getProductos(tipoProducto);
//Creamos un mapaproductos para poder crear los botones dinamicamente
mapaProductos = new HashMap();
//Borramos el panel jpanelproductos para montarlo de nuevo como nosotros queremos
jpanelProductos.removeAll();
//Creamos los 15 botones que contendra el panel y los hacemos todos invisibles
for (int i = 1; i < productos.size()+2; i++) {
mapaProductos.put(i, new JProductoButton());
mapaProductos.get(i).addActionListener(objEven);
mapaProductos.get(i).setVisible(false);
jpanelProductos.add(mapaProductos.get(i), i - 1);
}
//Hacemos visibles tantos botones como productos tenemos en la familia enviada como parametro
for (int i = 0; i < productos.size(); i++) {
JProductoButton boton = mapaProductos.get(i + 1);
UIManager.put("Button.select", Color.WHITE);
boton.setVisible(true);
boton.setProducto(productos.get(i));
boton.setHorizontalTextPosition(SwingConstants.CENTER);
boton.setVerticalTextPosition(SwingConstants.BOTTOM);
boton.setFocusPainted(false);
boton.setBackground(Color.WHITE);
boton.setFont(new java.awt.Font("Arial", 1, 9));;
boton.setText(productos.get(i).getDescripcion());
boton.setIcon(new javax.swing.ImageIcon(productos.get(i).getImagen().getScaledInstance(88, 70, Image.SCALE_SMOOTH)));
boton.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 204), 2));
boton.setPreferredSize(new java.awt.Dimension(76, 97));
boton.setMinimumSize(new java.awt.Dimension(76, 97));
boton.setMaximumSize(new java.awt.Dimension(76, 97));
}
jpanelProductos.repaint();
}
//Este metodo es generado automaticamente por netbeans
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane2 = new javax.swing.JScrollPane();
jpanelProductos = new javax.swing.JPanel();
setMinimumSize(new java.awt.Dimension(410, 300));
setName(""); // NOI18N
setPreferredSize(new java.awt.Dimension(410, 300));
setLayout(null);
jpanelProductos.setPreferredSize(new java.awt.Dimension(350, 2000));
jpanelProductos.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 2, 2));
jScrollPane2.setViewportView(jpanelProductos);
add(jScrollPane2);
jScrollPane2.setBounds(0, 0, 410, 300);
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JPanel jpanelProductos;
// End of variables declaration
//Creamos los get y los set necesarios
public javax.swing.JPanel getJpanelProductos() {
return jpanelProductos;
}
public void setJpanelProductos(javax.swing.JPanel jpanelProductos) {
this.jpanelProductos = jpanelProductos;
}
public void setControlador(ControladorEventListener controlador) {
this.objEven.setControlador(controlador);
}
public javax.swing.JScrollPane getjScrollPane2() {
return jScrollPane2;
}
public void setjScrollPane2(javax.swing.JScrollPane jScrollPane2) {
this.jScrollPane2 = jScrollPane2;
}
}
Ahora simplemente tengo un pequeño problema, la barra de scroll aparece siempre y yo quiero que aparezca solo cuando sea necesario, se que el problema es debido a que el jpanel es mucho mas grande que el jscrollpane pero lo tenia que poner mas grande para que saliera el scroll y no se como hacer que el jpanel crezca conforme voy añadiendo los botones de los distintos productos, si alguien puede ayudarme con esto o darme alguna idea estare muy agradecido.
Un saludo.
Sospecho que tu problema real tiene bastante que ver con el código siguiente.
Lo siento, pero es mediante tests ejecutables como se encuentran problemas, o se comunican a otros.
Puedes ejecutarlo y ver lo que sucede.
/**
<p>
@author Carlos Hoces
*/
public class NewJFrame extends javax.swing.JFrame {
/** Creates new form NewJFrame */
public NewJFrame() {
initComponents();
}
/** This method is called from within the constructor to
initialize the form.
WARNING: Do NOT modify this code. The content of this method is
always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jPanel1 = new NewJPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jScrollPane1.setViewportView(jPanel1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 278, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}// </editor-fold>
/**
@param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new NewJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
// End of variables declaration
}
/**
<p>
@author Carlos Hoces
*/
public class NewJPanel extends javax.swing.JPanel {
/** Creates new form NewJPanel */
public NewJPanel() {
initComponents();
}
/** This method is called from within the constructor to
initialize the form.
WARNING: Do NOT modify this code. The content of this method is
always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane2 = new javax.swing.JScrollPane();
jTree1 = new javax.swing.JTree();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jInternalFrame1 = new javax.swing.JInternalFrame();
jToolBar1 = new javax.swing.JToolBar();
jButton1 = new javax.swing.JButton();
jScrollPane2.setViewportView(jTree1);
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane1.setViewportView(jTable1);
jInternalFrame1.setVisible(true);
jToolBar1.setRollover(true);
jButton1.setText("jButton1");
jButton1.setFocusable(false);
jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jToolBar1.add(jButton1);
javax.swing.GroupLayout jInternalFrame1Layout = new javax.swing.GroupLayout(jInternalFrame1.getContentPane());
jInternalFrame1.getContentPane().setLayout(jInternalFrame1Layout);
jInternalFrame1Layout.setHorizontalGroup(
jInternalFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jInternalFrame1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
jInternalFrame1Layout.setVerticalGroup(
jInternalFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jInternalFrame1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 257, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jScrollPane1)
.addComponent(jInternalFrame1))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 522, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(jInternalFrame1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 298, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
);
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JInternalFrame jInternalFrame1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTable jTable1;
private javax.swing.JToolBar jToolBar1;
private javax.swing.JTree jTree1;
// End of variables declaration
}
Puesto que diseñas con NetBeans, los JScrollPane se crean con la propiedad AS_NEEDED por defecto. Las barras solo se ven cuando son necesarias.
Si ejecutas mi código, y haces que crezca el JFrame, verás que acaban por desaparecer.
http://docs.oracle.com/javase/7/docs/api/javax/swing/ScrollPaneConstants.html#HORIZONTAL_SCROLLBAR_AS_NEEDED
Ya lo tengo y ya me funciona todo perfectamente, muchas gracias por todo, solo he tenido que añadir cuatro lineas de codigo que son estas:
double alto = (double)((double)productos.size()/5);
int valor1 = (int) Math.ceil(alto) ;
int valor = valor1 * 100;
jpanelProductos.setPreferredSize(new java.awt.Dimension(350, valor));
De nuevo muchas gracias y podeis cerrar el tema si lo considerais necesario.
Un saludo y gracias.
Hola:
Me gustaria añadir un scrollbar a un jpanel con flowlayout y no hay manera, lo he intentado todo ya y no consigo hacerlo y lo peor de todo es que no se donde esta el fallo, la verdad es que soy bastante nuevo en java y aun tengo muchos fallos tontos por lo que me gustaria que alguien me pudiera ayudar a ver mi fallo y conseguir que salga la scrollbar.
Este es mi codigo:
//Creamos el panel que contendra los botones de cada producto diferente
package com.foolsrecords.tpv.tablaproductos.vista;
//Hacemos todas las importaciones necesarias
import com.foolsrecords.tpv.modelo.Producto;
import com.foolsrecords.tpv.modelo.eventos.ControladorEventListener;
import com.foolsrecords.tpv.modelo.eventos.ProductoSeleccionadoListener;
import com.foolsrecords.tpv.servicios.ServicioItemVenta;
import com.foolsrecords.tpv.servicios.ServicioProducto;
import com.foolsrecords.tpv.vista.componentes.JProductoButton;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Image;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
//Creamos la clase principal
public class TablaProductos extends javax.swing.JPanel {
//Creamos las variables y objetos necesarios para poder trabajar
private Map<Integer, JProductoButton> mapaProductos;
ProductoSeleccionadoListener objEven = new ProductoSeleccionadoListener(this);
ServicioItemVenta servItemVenta = new ServicioItemVenta();
//Creamos el constructor
public TablaProductos() {
initComponents();
inicializarPanelProductos(0); //con los subproductos de tipo 1
}
//Inicializamos el panel de productos y le pasamos la familia de los productos como parametro para mostrar los botones correctos
public void inicializarPanelProductos(int tipoProducto) {
//Creamos un objeto para conectar con la base de datos a traves de la clase servicioproducto
ServicioProducto servicio = new ServicioProducto();
//Conectamos con la base de datos y cojemos los productos de la familia enviada como parametro
List<Producto> productos = servicio.getProductos(tipoProducto);
//Creamos un mapaproductos para poder crear los botones dinamicamente
mapaProductos = new HashMap();
//Borramos el panel jpanelproductos para montarlo de nuevo como nosotros queremos
jpanelProductos.removeAll();
//Creamos los 15 botones que contendra el panel y los hacemos todos invisibles
for (int i = 1; i <= 30; i++) {
mapaProductos.put(i, new JProductoButton());
mapaProductos.get(i).addActionListener(objEven);
mapaProductos.get(i).setVisible(false);
jpanelProductos.add(mapaProductos.get(i), i - 1);
}
//Hacemos visibles tantos botones como productos tenemos en la familia enviada como parametro
for (int i = 0; i < productos.size(); i++) {
JProductoButton boton = mapaProductos.get(i + 1);
UIManager.put("Button.select", Color.WHITE);
boton.setVisible(true);
boton.setProducto(productos.get(i));
boton.setHorizontalTextPosition(SwingConstants.CENTER);
boton.setVerticalTextPosition(SwingConstants.BOTTOM);
boton.setFocusPainted(false);
boton.setBackground(Color.WHITE);
boton.setFont(new java.awt.Font("Arial", 1, 9));;
boton.setText(productos.get(i).getDescripcion());
boton.setIcon(new javax.swing.ImageIcon(productos.get(i).getImagen().getScaledInstance(88, 70, Image.SCALE_SMOOTH)));
boton.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 204), 2));
boton.setPreferredSize(new java.awt.Dimension(79, 97));
boton.setMinimumSize(new java.awt.Dimension(79, 97));
boton.setMaximumSize(new java.awt.Dimension(79, 97));
}
jpanelProductos.repaint();
}
//Este metodo es generado automaticamente por netbeans
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
jpanelProductos = new javax.swing.JPanel();
setMinimumSize(new java.awt.Dimension(410, 300));
setName(""); // NOI18N
setPreferredSize(new java.awt.Dimension(410, 300));
setLayout(null);
jPanel1.setPreferredSize(new java.awt.Dimension(410, 300));
jPanel1.setLayout(null);
jpanelProductos.setPreferredSize(new java.awt.Dimension(400, 800));
jpanelProductos.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 2, 2));
jScrollPane2.setViewportView(jpanelProductos);
jPanel1.add(jScrollPane2);
jScrollPane2.setBounds(0, 0, 410, 300);
add(jPanel1);
jPanel1.setBounds(0, 0, 410, 300);
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JPanel jpanelProductos;
// End of variables declaration
//Creamos los get y los set necesarios
public javax.swing.JPanel getJpanelProductos() {
return jpanelProductos;
}
public void setJpanelProductos(javax.swing.JPanel jpanelProductos) {
this.jpanelProductos = jpanelProductos;
}
public void setControlador(ControladorEventListener controlador) {
this.objEven.setControlador(controlador);
}
}
Si alguien pudiera ayudarme le estare muy agradecido.
Gracias por todo.