Olá Pessoal eu estou precisando de uma ajuda ae que seria muito útil ficaria muito grato se me ajudassem…
Eu começei a fazer etec de informática no começo deste ano, e adorei muito programação eu realmente achei com o quê eu quero trabalhar mas enfim. Vamos direto ao assunto XD
Eu estou fazendo uma tela de splash para um programa que vai ser para um mercado, estou usando JLabel e uma JProgressBar,e também o grid layout só que o problema é que minha imagem no JLabel não aparece ,aparece apenas quando eu aumento a janela clicando e arrastando, o tamanho da janela eu acho que não seja o problema pois eu já coloquei centenas de sizes… e mesmo assim está com esse bug, o endereço está correto isso é certaza, o quê ocorre?
Eis o código
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.HeadlessException;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Rafael
*/
public class SplashInicio extends JFrame{
public SplashInicio() throws HeadlessException {
this.setLayout(new BorderLayout());
this.setSize(1150,460);
this.setVisible(true);
this.setEnabled(true);
this.setLocationRelativeTo(null);
Container cSplash = getContentPane();
JLabel imagem = new JLabel();
imagem.setIcon(new ImageIcon("C:\\Users\\Rafael\\Documents\\NetBeansProjects\\Estudo\\src\\Res\\Splash.png"));
imagem.setSize(1100,450);
imagem.setVisible(true);
imagem.setEnabled(true);
imagem.setBorder(BorderFactory.createLineBorder(Color.BLACK, 5));
JProgressBar carregando= new JProgressBar();
carregando.setSize(1100, 25);
carregando.setBackground(new Color(0,80,0,0));
carregando.setVisible(true);
carregando.setBorderPainted(true);
carregando.setEnabled(true);
carregando.setValue(30);
cSplash.add(imagem,BorderLayout.NORTH);
cSplash.add(carregando,BorderLayout.SOUTH);
for(int i =0; i<=100;i++){
try{
Thread.sleep(30);
carregando.setValue(i);
}catch(InterruptedException e){
}
}
//======================= Abrir Janela de Login ================================================
JanelaPrincipal app = new JanelaPrincipal();
app.setVisible(true);
this.setVisible(false);
this.setEnabled(false);
}
}
Eu tentei adicionar a JLabel dentro de um JPanel, unto com o progress bar mas mesmo assim os objetos não aprecem apenas aparecem qaundo eu redimensiono a janela o quê é isso ? porfavor me digam porquê os dois objetos só aprecem quando eu redimensiono ? eu já mduei as coordenadas centenas de vezes mas mesmo assim…
simplifiquei para a única parte que interessa .
Outra coisa, provavelmente é aquela gambi de for ali que está travando sua tela. Você não pode congelar a Thread do Swing, ou então, sua interface ficará travada.
Se quiser fazer aquela espera, use um Timer.
Muito Obrigado ViniGodoy .
Eu estava vendo um vídeo sobre como criar um jogo de nave em java no youtube e então eu ví a lógica que o cara lá usou, usando um timer e uma classe com extends JPanel e implements action listener e coloquei na minha classe de splash e dentro do construtor da classe principal , então eu coloquei o painel e depois adicionei a barra de progresso. ficou assim;
Classe Splash Inicio.
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.Timer;
public class SplashInicio extends JPanel implements ActionListener {
private Image fundo;
private Timer tempo;
public SplashInicio(){
ImageIcon referencia = new ImageIcon("res\\Splash.png");
fundo=referencia.getImage();
this.setBackground(Color.black);
this.setSize(500,165);
this.setVisible(true);
this.setEnabled(true);
this.setLayout(null);
tempo= new Timer(5, this);
tempo.start();
}
public void paint(Graphics g){
Graphics2D imagem = (Graphics2D)g;
g.drawImage(fundo, 0, 0, null);
}
@Override
public void actionPerformed(ActionEvent e) {
repaint();
}
}
Classe Principal
import java.awt.Color;
import javax.swing.JProgressBar;
import javax.swing.JWindow;
public class Principal extends JWindow{
private int i=0;
public Principal(){
//this.setExtendedState(MAXIMIZED_BOTH); Pegar tamanho máximo da imagem!
this.setLayout(null);
this.setVisible(true);
this.setSize(500, 180);
this.setLocationRelativeTo(null);
JProgressBar carregando = new JProgressBar();
carregando.setSize(480, 15);
carregando.setLocation(10,165);
carregando.setStringPainted(true);
carregando.setBorderPainted(false);
carregando.setBackground(new Color(100, 100, 0, 0));
getContentPane().add(carregando);
getContentPane().add(new SplashInicio());
for(i=0;i<=100;i++){
try{
Thread.sleep(20);
carregando.setValue(i);
}catch(InterruptedException e){
System.out.print("Error");
}
}
System.exit(1);
}
public static void main(String[] args) {
Principal app = new Principal();
}
}
Ficou extenso para uma coisa que era para ser muito simples mas foi a única forma que eu consegui , eu não consigo usar o método paint de jeito nenhum a não ser que seja usando o timer e action listener e actionperfomerd
Obrigado pela ajuda de quem postou aqui!
Cara muito obrigado por sua ajuda , bom eu queria fazer essa telinha de splash para um sistema de mercado que eu e meu amigo vamos fazer para o tcc da etec , mas eu também me interesso muito em criar jogos principalmente em C com bibliotecas sdl e allegro mas não estou com disposição de aprender java e sdl ou allegro ao mesmo tempo então vou esperar mais um bocado , e gostei muito dos tudos de jogos 2 d em java neste final de seman irei dar uma olhada.
Sobre o sistema que eu e meu amigos estamos fazendo para o mercado eu poderia abrir um tópico apenas para as pessoas me ajudarem com isso com sugestões , dicas e me ajudando com os problemas ?