PDA

View Full Version : [Java] Problema visualizzazione JProgressBar in JDialog


UnknownSoldier
06-06-2010, 10:28
Ciao a tutti! Ho questo problema: ho creato una classe che mi consente di far comparire un JDialog con dentro una semplice JProgressBar indeterminata... il problema è che il JDialog viene visualizzato, ma non la JProgressBar, che viene invece visualizzata anch'essa solo se richiamo il metodo in un'altra parte del programma, ad esempio nel costruttore... perchè?? o_O

ProgressBar:
package immagineX;

import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JLabel;

public class ProgressBar
{
public static JDialog showIndeterminateBar(JFrame parentFrame)
{
JDialog barDialog = new JDialog (parentFrame);
barDialog.setSize (250, 80);
barDialog.setLocationRelativeTo (null);
barDialog.setResizable (false);
barDialog.setDefaultCloseOperation (JDialog.DO_NOTHING_ON_CLOSE);

JPanel panelDialog = new JPanel();

JLabel lab = new JLabel ("Caricamento...");
panelDialog.add (lab);

JProgressBar bar = new JProgressBar();
bar.setIndeterminate(true);
panelDialog.add (bar);

barDialog.add (panelDialog);
barDialog.setVisible(true);

return barDialog;
}
}

ImmagineX:
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JLabel;
import javax.swing.JDialog;
import java.io.File;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import immagineX.*;

public class ImmagineX extends JFrame
{
public ArrayList<ImageX> images;

public JLabel infoLabel;
public JPanel centerPanel;

public ImmagineX()
{
super("ImmagineX");
setSize(640, 400);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//addWindowListener(new WindowHandler());

setJMenuBar(new XMenuBar(this));

images = new ArrayList<ImageX>();

infoLabel = new JLabel("Benvenuto in ImmagineX");
centerPanel = new JPanel(TableLayout.newInstance());

add(infoLabel, BorderLayout.NORTH);
add(new JScrollPane(centerPanel), BorderLayout.CENTER);

setVisible(true);
}

public void updateCenterPanel()
{
JDialog barDialog = ProgressBar.showIndeterminateBar(this);
centerPanel.removeAll();
for (ImageX image : images)
{
JPanel imagePanel = new JPanel();
imagePanel.setPreferredSize(new Dimension(160, 200));
imagePanel.add(new JLabel(image.getImagePreview()));
imagePanel.add(new JLabel(image.getFile().getName()));
centerPanel.add(imagePanel);
}
barDialog.dispose();
}

public static void main(String[] args)
{
new ImmagineX();
}
}

updateCenterPanel() che richiama il metodo per creare il JDialog con la JProgressBar viene invocato in un actionPerformed(), che fa parte ovviamente di una classe che implementa ActionListener.

Qualcuno può aiutarmi?

UnknownSoldier
06-06-2010, 11:27
Risolto invocando il metodo in un nuovo thread :P