Problemas al añadir paneles JPanel y JScrollPane

Alejandro
04 de Abril del 2006
Saludos compañeros, tengo un problema a la hora de presentar un panel. Le añado unas barras de scroll y dentro varios paneles y etiquetas con el layout gridbaglayout. Pero uno de esos paneles que añado a su vez tiene un layout que puede ser un gridlayout de una fila y una columna, o de una fila y dos columnas, en funcion de si una lista es vacia (1,1) o si no es vacia (1,2). Si es gridlayout (1,2) lo presenta sin problemas, xo si es un gridlayout (1,1) lo presenta mal, como si no respetase el tamaño del panel, y entonces no me muestra las barras de scroll del panel principal (el grande que contiene a todos) y los componentes se comprimen metiendose unos x otros.
Tambien quiero darle un tamaño minimo al panel p3, xo no lo consigo y solo puedo darselo a panel_pos, si se lo doy tambien a panel_neg, se descompone todo. Por favor ayudadme, gracias. Os dejo el codigo:



void mostrar_resultados (JPanel p, JList e_finales, JList l_pos, JList l_neg, JList l_t_pos, JList l_t_neg, JTable tab, long tiempo, float por_pos, float por_neg, int rec_pos, int rec_neg)
{
JPanel panel_aux=new JPanel();
p.removeAll();
Font arial11=new Font("Arial", Font.BOLD, 11);
GridBagConstraints constraints=new GridBagConstraints();

JLabel et=new JLabel("El automata se ha inducido con los siguientes parametros: ");
et.setFont(arial11);
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JPanel p3=new JPanel();
JPanel p4=new JPanel();
JPanel p5=new JPanel();
JPanel p6=new JPanel();
JPanel p7=new JPanel();

GridBagLayout gl_ppal=new GridBagLayout();

panel_aux.setLayout(gl_ppal);
GridLayout gl_panel2=new GridLayout(4,1);
p2.setLayout(gl_panel2);
GridLayout gl_panel3=new GridLayout(1,2);
GridLayout gl_no_neg=new GridLayout(1,1);

GridLayout gl_panel4=new GridLayout(2,1);
p4.setLayout(gl_panel4);

// añado las respectivas etiquetas, lo hace bien
p2.add(et_est);
p2.add(et_alf);
p2.add(et_fin);
p2.add(et_ini);


JPanel p_pos=new JPanel();
JPanel p_neg=new JPanel();

p_pos.setBorder(new TitledBorder(new String("Muestra positiva)));
p3.setPreferredSize(new Dimension(160,50));

p_neg.setBorder(new TitledBorder(new String("Muestra negativa")));

for (int i=0; i<l_pos.getModel().getSize(); i++)
l_pos.ensureIndexIsVisible(i);
for (int i=0; i<l_neg.getModel().getSize(); i++)
l_neg.ensureIndexIsVisible(i);

l_pos.setVisibleRowCount(7);
l_pos.setEnabled(false);
l_pos.setOpaque(true);
l_neg.setVisibleRowCount(7);
l_neg.setEnabled(false);
l_neg.setOpaque(true);

JScrollPane sc_pos=new JScrollPane();
JScrollPane sc_neg=new JScrollPane();
sc_pos.setViewportView(l_pos);
sc_neg.setViewportView(l_neg);

p_pos.add(sc_pos);
p_neg.add(sc_neg);

// aqui puede ser donde viene el problema
// o si no al darle el tamaño minimo a los paneles
// contenedores

if ((l_neg.getModel().getSize())!=0)
{
p3.setLayout(gl_panel3);
p3.add(p_pos);
p3.add(p_neg);
}
else
{
p3.setLayout(gl_no_neg);
p3.add(p_pos);
}

JLabel et_pos=new JLabel("Efectividad en las cadenas positivas reconocidas "+String.valueOf(por_pos)+"%, "+String.valueOf(rec_pos)+" de "+String.valueOf(String.valueOf(l_t_pos.getModel().getSize())+" cadenas"));
JLabel et_neg=new JLabel("Efectividad en las cadenas negativas rechazadas "+String.valueOf(por_neg)+"%, "+String.valueOf(l_t_neg.getModel().getSize()-rec_neg)+" de "+String.valueOf(String.valueOf(l_t_neg.getModel().getSize())+" cadenas"));
JLabel no_pos=new JLabel("No se han introducido cadenas positivas de prueba");
JLabel no_neg=new JLabel("No se han introducido cadenas negativas de prueba");

if ((l_t_pos.getModel().getSize())!=0) p4.add(et_pos);
else p4.add(no_pos);
if ((l_t_neg.getModel().getSize())!=0) p4.add(et_neg);
else p4.add(no_neg);

constraints.gridx=0;
constraints.gridy=0;
constraints.gridwidth=1;
constraints.gridheight=1;
constraints.fill=GridBagConstraints.HORIZONTAL;
constraints.anchor=GridBagConstraints.WEST;
constraints.insets=new java.awt.Insets(10,0,2,0);
panel_aux.add(et, constraints);

constraints.gridx=0;
constraints.gridy=1;
constraints.gridwidth=1;
constraints.gridheight=1;
constraints.ipady=30;
panel_aux.add(p2, constraints);

JLabel et_matriz=new JLabel("Muestras y efectividad de las cadenas");
et_matriz.setFont(arial11);
constraints.gridx=0;
constraints.gridy=2;
constraints.gridwidth=1;
constraints.gridheight=1;
constraints.insets=new java.awt.Insets(0,0,2,0);
panel_aux.add(et_matriz, constraints);

constraints.gridx=0;
constraints.gridy=3;
constraints.gridwidth=1;
constraints.gridheight=1;
constraints.ipady=0;
constraints.fill=GridBagConstraints.NONE;
constraints.insets=new java.awt.Insets(0,0,5,0);
panel_aux.add(p3, constraints);

constraints.gridx=0;
constraints.gridy=4;
constraints.gridwidth=1;
constraints.gridheight=1;
constraints.insets=new java.awt.Insets(0,0,5,0);
panel_aux.add(p4, constraints);

JLabel et_mat=new JLabel("Matriz de transiciones");
et_mat.setFont(arial11);
constraints.gridx=0;
constraints.gridy=5;
constraints.gridwidth=1;
constraints.gridheight=1;
constraints.insets=new java.awt.Insets(5,0,2,0);
panel_aux.add(et_mat, constraints);


tab.setRowSelectionAllowed(false);
tab.setColumnSelectionAllowed(false);
constraints.gridx=0;
constraints.gridy=6;
constraints.gridwidth=1;
constraints.gridheight=1;
panel_aux.add(tab, constraints);

JLabel et_tiempo=new JLabel("El tiempo de ejecucion fue de "+tiempo+" milisegundos");
et_tiempo.setFont(arial11);
constraints.gridx=0;
constraints.gridy=7;
constraints.gridwidth=1;
constraints.gridheight=1;
constraints.insets=new java.awt.Insets(10,0,5,0);
panel_aux.add(et_tiempo, constraints);

JScrollPane sc_panel=new JScrollPane();
sc_panel.setViewportView(panel_aux);
p.add(sc_panel);


p.revalidate();
p.repaint();

}

Alejandro
04 de Abril del 2006
Por favor, ayudadme. Gracias.