GridBagLayout

1 resposta
ThaisBardini

Sou nova na interface gráfica e tenho que fazer um tabuleiro.. mas quando add os botões com o GridBagLayout eles não ficam exatamente na posição que eu quero (que seria no estilo de uma matriz, pois tenho que faezr um jogo de resta-um)

package Limite;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Container;
import java.awt.Insets;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.*;

public class Tabuleiro extends JFrame implements ActionListener {
	
    private JButton[][] pinos;
    private GridBagConstraints constraints; // constraints of this layout
    private GridBagLayout layout;
    //Container c = this.getContentPane();  
    
    public Tabuleiro(){
    	 
    	super( "Resta um" );
        setLayout( new FlowLayout() );
        
        Icon pino = new ImageIcon( getClass().getResource( "pino.jpg" ) );
        Icon sempino = new ImageIcon( getClass().getResource( "sempino.jpg" ) );
        pinos = new JButton[9][9];
        
        layout = new GridBagLayout();
        setLayout(layout);
        constraints = new GridBagConstraints();
        //constraints.fill = GridBagConstraints.BOTH;
       //constraints.insets = new Insets(0, 0, 9, 9);
       

                
        for(int i=0; i<9;i++ )
        	for(int j=0; j<9;j++){
        		pinos[i][j]=new JButton(pino);
	    		addComponent(pinos[i][j], i, j, 1, 1);
	    		

        	    //add(pinos[i][j]); 
        	}
        

		for(int k = 0; k<9; k++)
			for(int l = 0; l<9; l++)
				if((k<3 && l<3) || (k<3 && l>5) || (k>5 && l<3) || (k>5 && l>5)){
	        	    pinos[k][l].setVisible(false);
	        	    addComponent(pinos[k][l], k, l, 1, 1);
	        	    //add(pinos[k][l]); 
				}
		pinos[4][4].setIcon(sempino);
		
		for(int o=0; o<9; o++)
	    	for(int p=0; p<9; p++){
	    		addComponent(pinos[o][p], o, p, 1, 1);
	    	}
        	
    }
    
    
    
    
    public void actionPerformed( ActionEvent event )
    { 
      
    }
    
    private void addComponent( Component component,int row, int column, int width, int height )
   {
      constraints.gridx = column;                           
      constraints.gridy = row;                               
      constraints.gridwidth = width;                     
      constraints.gridheight = height;                  
      layout.setConstraints( component, constraints ); 
      add( component );                                  
   } 


	  private class GerenciadorGeral implements ActionListener {
	    public void actionPerformed(ActionEvent evento) {
	      /*if (evento.getSource() == btnCancelar) 
	        System.exit(0);*/
	    }
	  }
    
    
 

    
}

Alguém pode me ajudar?
Valeu

1 Resposta

CrOnNoS

Do começo:
setLayout( new FlowLayout() );
Não existe um porque se configurar o layout como um FlowLayout no começo só para logo a seguir re-configurar-lo como gridBag

Segundo:
super("Resta um");

		Icon pino = new ImageIcon(getClass().getResource("pino.jpg"));
		Icon sempino = new ImageIcon(getClass().getResource("sempino.jpg"));
		pinos = new JButton[9][9];

		layout = new GridBagLayout();
		setLayout(layout);
		constraints = new GridBagConstraints();
		// constraints.fill = GridBagConstraints.BOTH;

		// Trecho que cria os pinos e os adicionam na janela pela primeira vez
		for (int i = 0; i < 9; i++) {
			for (int j = 0; j < 9; j++) {
				pinos[i][j] = new JButton(pino);
				addComponent(pinos[i][j], i, j, 1, 1);

				// add(pinos[i][j]);
			} // for
		} // for

Com apenas isso do seu código os pinos já estão sendo adicionados (imagino que corretamente já que estão no formato de uma matriz)
Não quer dar uma re-trabalhada no problema e/ou código para ser mais claro onde está o problema ?

Criado 21 de novembro de 2009
Ultima resposta 21 de nov. de 2009
Respostas 1
Participantes 2