JLabel

5 respostas
ThiagoA

Ola pessoa !!

Estou tentando colcar um JLabel sobre outro,

no meu codigo aprece um circulo laraja fora do “quadro” que crie e gostaria que

aparecesse dentro, porque estou montando um jogo de figuras geometricas.

Obrigado !!!

package jog;

// Importando as bibliotecas necessarias para execução do programa
import java.awt.*;
import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Janela {
	final static boolean shouldFill = true;
	final static boolean shouldWeightX = true;
	final static boolean RIGHT_TO_LEFT = false;

	public static void addComponentsToPane(Container pane) {
		if (RIGHT_TO_LEFT) {
			pane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
		}

		JButton button;
		JLabel label;
		JPanel pam;

		pane.setLayout(new GridBagLayout());
		GridBagConstraints comp = new GridBagConstraints();

		label = new JLabel("JOG");
		comp.fill = GridBagConstraints.PAGE_START;
		comp.gridx = 3;
		//comp.gridy = 0;
		pane.add(label, comp);

		label = new JLabel( QUADRO() );
		comp.fill = GridBagConstraints.HORIZONTAL;
		comp.ipady = 0;  // Importancia do label para o programa	
		pane.add(label, comp);
		
		label = new JLabel( CIRCULO() );
		pane.add(label, comp);


		label = new JLabel("TEMPO:");
		comp.fill = GridBagConstraints.HORIZONTAL;
		comp.ipady = 0;       					   // Redefinindo para padrão
		comp.weighty = 0.0;   					   // Solicita espaço extra vertical
		comp.anchor = GridBagConstraints.PAGE_END; // Fundo do espaço
		comp.insets = new Insets(10,0,0,0); 	   // Inserindo espaço em branco
		comp.gridx = 2;       					   // Alinhado com o botão 2
		comp.gridwidth = 2;   					   // 2 colunas de largura
		comp.gridy = 2;       					   // Terceira fila
		pane.add(label, comp);



	}

	//Metodo para criar quadro onde as figuras geometricas serão mostradas	
		private static ImageIcon QUADRO() {   
		int width=600, height=500;  // Tamanho do quadro 
			
		BufferedImage buffer = new BufferedImage( width, height, BufferedImage.TYPE_INT_RGB );   
		    
			Graphics g = buffer.createGraphics();   
			
			g.setColor( Color.BLACK );   
			g.fillRect( 0, 0, width, height );   
			
			   
			g.setColor( Color.WHITE);   
			g.fillRect( 2, 2, 596, 496 ); 
			
			return new ImageIcon( buffer );   
		 
	}
		
		private static ImageIcon CIRCULO() {   
							
			BufferedImage buffer = new BufferedImage( 100, 100, BufferedImage.TRANSLUCENT );   
			    
				Graphics g = buffer.createGraphics();   
				
				g.setColor( Color.ORANGE );   
				g.fillOval( 0, 0, 100, 100 );   
				
												
				return new ImageIcon( buffer );   
			 
		}




	private static void createAndShowGUI() {
		//Cria e configura a janela
		JFrame frame = new JFrame("JOG - Jogo da Geometria");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



		//Configura o conteúdo do painel
		addComponentsToPane(frame.getContentPane());

		//Mostra a janela.
		frame.pack();
		frame.setVisible(true);
	}

	public static void main(String[] args) {

		javax.swing.SwingUtilities.invokeLater (new Runnable() 
		{ public void run() 
		{ createAndShowGUI();}
		});

	}
}

5 Respostas

JoaoBluSCBR

Cara,

Me desculpe em ser franco, mas teu jogo não tem futuro.

Quer fazer um jogo, esqueça os objetos swing e trate de desenhar graficamente
aquilo que voce precisa.

Assim vc controla onde coloca cada forma, pode colocar uma sobre a outra.

O que vc fez nesse teu código não vai funcionar. Veja que você está criando um
layout (procure entender que essa palavra quer dizer organizaçao). Daí vc
atribui esse layout a uma painel e acrescenta no painel esses objetos label.

Cada objeto vai sendo “organizado” dentro do layout. Organização é colocar um
do lado do outro, jamais um dentro ou sobre o outro.

Use um Frame e você terá o código mais ou menos assim:

public void paint(Graphics g) {
        desenharTabuleiro(g);
}
    
    public void update(Graphics g){
        paint(g);
    }
    
    
    public void desenharTabuleiro(Graphics g){
        
        int usar = (int)tela.getHeight();
        if (usar > (int)tela.getWidth())
            usar = (int) tela.getWidth();

        usar -= 100;
        int qLarg = usar/9;
        int tLarg = qLarg * 9;

        int x0 = ((int)tela.getWidth()-tLarg)/2;
        int y0 = ((int)tela.getHeight()-tLarg)/2;

        g.setColor( Color.gray );
        g.fillRoundRect( x0, y0, tLarg, tLarg, 30, 30 );
        
        g.setColor(Color.blue);
        g.drawOval(x0 + tLarg + (((int)tela.getWidth()-(x0 + tLarg))/2)-50, y0 + (tLarg/2), 100, 60);
        
        int contaCanto = 0;
        x0 = ((int)tela.getWidth()-tLarg)/2;
        for(int i=0; i<9; i++){
            y0 = ((int)tela.getHeight()-tLarg)/2;
            for(int j=0; j<9; j++){
                if(!(i>0 && i<8 && i!=4 && j>0 && j<8 && j!=4)){
                    g.setColor( Color.black );
                    g.draw3DRect( x0, y0, qLarg, qLarg, true );
                    if((i%8==0) && (j%8==0)){
                        switch (contaCanto){
                            case 0:
                                g.setColor( Color.blue );
                                break;
                            case 1: 
                                g.setColor( Color.green );
                                break;
                            case 2:
                                g.setColor( Color.yellow );
                                break;
                            case 3: 
                                g.setColor( Color.red );
                                break;
                        }
                        g.fill3DRect( x0, y0, qLarg, qLarg, true );
                        contaCanto++;
                    }
                    //Centro preto
                    if((i==4) && (j==4)){
                        g.setColor( Color.black );
                        g.fill3DRect( x0, y0, qLarg, qLarg, true );
                    }                   
                    desenharPeoes(g, visToObj(i, j), x0, y0); 
                }
                y0+=qLarg;
            }
            x0+=qLarg;
        }
    }

Boa sorte, se precisar algo estamos aqui.

JoaoBluSCBR

To colocando um projeto em anexo.

Descompacte e carregue ele no NetBeans. Rode e vai desenhar um tabuleiro.

Estude e quem sabe isso te ajude a entender como funcionam as partes graficas de jogos.

abs

ThiagoA

E ai

JoaoBluSCBR

valeu pela ajuda!

O jogo é um projeto acadêmico voltado para crianças ente 5 e 10 anos

para auxilia las a reconhecer figuras geométricas, e o desfio proposto pelos

professores é faze-lo todo em JAVA sem carrega imagens fora das bibliotecas

nativas da linguagem !!

OBRIGADO !!!

R

No teu primeiro código, para que os componentes não fiquem um ao lado do outro, você precisa setar o Layout do JFrame para Null layout ou Layout Absoluto. Se você não fizer isso, não consegue que o JLabel fique na posição que vc quer, sempre que vc mudar a posição dele, o JFrame vai reorganizá-lo dentro da Janela conforme o outro layout que estiver.

quaresma

boa noite muito bom a sua iniciativa.

botão direito na sua area de trabalho
DEFINIR LAYOUT
LAYOUT NULL

bem simpes.l

Criado 2 de agosto de 2011
Ultima resposta 15 de mar. de 2012
Respostas 5
Participantes 4