Segue abaixo um código de exemplo em que inicio um JDialog sobre um JFrame e este Jdialog armazena uma JProgressBar.
A progressao da barra esta perfeita, mas as configuracoes de setBackground() so aparecem apos o termino da execucao do progresso da barra… como eu faço para que a configuracao de setBackground() serem reconhecidas antes do inicio da execucao da barra JProgressBar?
import java.awt.;
import java.awt.event.;
import javax.swing.*;
public class JPBarra extends JFrame{
JButton executar;
private static JPBarra jpbarra;
public static synchronized JPBarra getInstance() {
jpbarra = null;
if (jpbarra == null)
jpbarra = new JPBarra();
return jpbarra;
}
private JPBarra() {
super("JFrame");
setResizable(false);
initGUI();
}
public void initGUI(){
Container c = getContentPane();
ActionEventHandler handler = new ActionEventHandler();
c.setLayout(null);
Font font = new Font("Verdana", Font.PLAIN, 14);
JPanel fundo = new JPanel();
fundo.setBackground(Color.WHITE);
fundo.setOpaque(true);
fundo.setBounds(50,50,900,300);
c.add(fundo);
executar = new JButton("Executar");
executar.setFont(font);
executar.setBackground(Color.LIGHT_GRAY);
executar.addActionListener(handler);
c.add(executar);
executar.setBounds(300,370,100,30);
setSize(1000,500);
setLocationRelativeTo(null);
setVisible(true);
}
public void progresso(){
final JDialog dlg = new JDialog(jpbarra, "Progress Dialog", true);
dlg.setLayout(null);
dlg.getContentPane().setBackground(Color.YELLOW);
dlg.getRootPane().setOpaque(true);
JProgressBar dpb = new JProgressBar(0, 500);
dpb.setStringPainted(true);
JPanel central= new JPanel(new BorderLayout());
central.add(dpb,BorderLayout.CENTER);
central.setBounds(50,55,400,25);
JLabel lb = new JLabel("aguarde...");
lb.setOpaque(true);
lb.setBounds(50,20,70,25);
dlg.add(lb);
dlg.add(central);
dlg.setSize(500, 160);
dlg.setLocationRelativeTo(jpbarra);
Thread t = new Thread(new Runnable() {
public void run() {
dlg.setVisible(true);
}
});
t.start();
for (int i = 0; i <= 500; i++) {
dpb.setValue(i);
Rectangle rect = new Rectangle(0,0,dpb.getSize().width, dpb.getSize().height);
dpb.paintImmediately(rect);
try {
Thread.sleep(10);
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
}
public static void main(String[] args){
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (InstantiationException e) {
} catch (ClassNotFoundException e) {
} catch (UnsupportedLookAndFeelException e) {
} catch (IllegalAccessException e) {
}
JPBarra app = new JPBarra();
app.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
private class ActionEventHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == executar) {
progresso();
}
}
}
}