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?
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?