Duvida com JTextField

9 respostas
anderson.bonavides

Pessoal estou fazendo uma calculadora em Java e não consigo completar a tela da minha calculadora.
Segue uma imagem dela e a parte códido do textfield.

GridBagLayout layout  = new GridBagLayout();        
		GridBagConstraints c = new GridBagConstraints();
		getContentPane().setLayout(layout);

		// Configura as proridades de cada botao
		//primeira linha
		c.gridy = 0; // primeira linha
		c.gridx = 4; // primeira coluna		
		c.ipadx = 0;
		c.fill = GridBagConstraints.BOTH;
		layout.setConstraints(tela, c);
		getContentPane().add(tela);

Alguem poderia me ajudar?
Desde já agradeço.

9 Respostas

kaique

Pelo que eu entendi você não está conseguindo colocar o JTextField ocupando todo o espaço horizontal, né isso?
Você pode resolver o seu problema usando vários tipos de gerenciadores de Layout.
Por exemplo, poderia usar um BorderLayout primeiro, colocando o JTextField na posição Norte, e depois colocaria um JPanel na posição Centro. Aí, esse panel você poderia aplicar o GirdBagLayout normalmente.
Tenta ver se assim funciona…

[]'s.

anderson.bonavides

kaique poderia me mostrar como ficaria? Sou muito novo em swing. Eu só mechia com o metisse mas agora resolvi fazer com o eclpse no braço.
Ficaria muito grato.

kaique

Cara, seria algo parecido com isso:

setLayout(new BorderLayout());

JTextField display = new JTextField();
add(display, BorderLayout.NORTH);

JPanel buttonsArea = new JPanel();
add(buttonsArea, BorderLayout.CENTER);
buttonsArea.setLayout(new GridLayout(6, 6)); // Informe o tamanho da sua matriz aqui

/* Exemplo para adicionar os botões da calculadora */
for (int i = 0; i < 35; i++) {
    buttonsArea.add(new JButton("X"));
}

Coloque esse código no componente onde você está adicionando seus controles (JTextField, JButtons, etc…).
Com essa idéia, basta você adaptar para o que deseja…
[]'s.

anderson.bonavides

kaique pelo que eu entendi eu teria que alterar completamente minha calculadora. To certo?

kaique

No meu ponto de vista você vai alterar a parte mais simples da calculadora, que é adicionar os componentes na tela. Coloca tudo isso dentro de um método e chama ele no seu construtor. Acho que seria ruim se você tivesse que alterar as funcionalidades devido a essa mudança.
Só uma pergunta que me veio a mente agora, você está usando MVC certo?

[]'s.

anderson.bonavides

Não, ta tudo em um único repositório único. Não estou utilizando nenhum padrão de projeto.

kaique

Pois então cara acho que essa é uma ótima oportunidade de você fazer um refactoring do seu projeto e buscar encontrar por si próprio as vantagens de se utilizar design patterns. Se eu fosse você, eu iria atrás de alterar, até porque usando esse esquema de mais de um layout você não terá problemas com redimensionamentos na janela, pois os gerenciadores de layout farão todo o “trabalho sujo” por você…

Precisando, tamos aí…
[]'s.

leandro.anjos

Fala ai Anderson.

Pelo seu código não da pra saber como você esta adicionando os componentes no JPanel, principalmente o JTextField, pelo que eu entendi, você tem um JPanel chamado “tela” e naquele código você o adiciona ao layout do getContentPanel do JFrame. Certo?

Se eu fosse você faria isso, mudaria o LayoutManager do JFrame ou JDialog, tiraria o textfield do painel e o adicionaria no JFrame.

Tentei alterar aqui o seu código, mas infelizmente não pude testar por falta de tempo para implementar toda a tela, mas acredito que isto deve resolver. Se o JTextField continuar pequeno tente settar o atributo prefferedSize dele. :smiley:

//GridBagLayout layout  = new GridBagLayout();          
         //GridBagConstraints c = new GridBagConstraints();  
         getContentPane().setLayout(new BorderLayout());  
   
        // Configura as proridades de cada botao  
        //primeira linha  
        //   c.gridy = 0; // primeira linha  
        //   c.gridx = 4; // primeira coluna       OBSERVE QUE AQUI VOCÊ NÃO ESTAVA COLANDO NA 1ª COLUNA, E SIM NA 5ª
        //   c.ipadx = 0;  
        //   c.fill = GridBagConstraints.BOTH;  
        //   layout.setConstraints(tela, c);  
        
      txtDisplay = new JTextField("0");
      getContentPane().add(txtDisplay, BorderLayout.NORTH);
      getContentPane().add(tela, BorderLayout.CENTER);
anderson.bonavides

Sobre o padrão de projeto seria interessante fazer utilizando um. Mas infelizmente o tempo não da e acho que não vai ter muita importancia para o tamanho do projeto. Até por que ele não vai crescer.

public void exibirCalculadora(){
		GridBagLayout layout  = new GridBagLayout();        
		GridBagConstraints c = new GridBagConstraints();
		getContentPane().setLayout(layout);

		// Configura as proridades de cada botao
		//primeira linha
		c.gridy = 0; // primeira linha
		c.gridx = 4; // primeira coluna		
		c.ipadx = 0;
		c.fill = GridBagConstraints.BOTH;
		tela.setHorizontalAlignment(JTextField.RIGHT);
		layout.setConstraints(tela, c);
		getContentPane().add(tela);
		


		//segunda linha
		c.gridy = 1; // primeira linha
		c.gridx = 0; // primeira coluna
		c.ipadx = 4;
		layout.setConstraints(funcao1, c);
		getContentPane().add(funcao1);

		c.gridy = 1; // primeira linha
		c.gridx = 1; // primeira coluna
		c.ipadx = 4;
		layout.setConstraints(sete, c);
		getContentPane().add(sete);

		c.gridy = 1; // primeira linha
		c.gridx = 2; // primeira coluna
		c.ipadx = 4;
		layout.setConstraints(oito, c);
		getContentPane().add(oito);

		c.gridy = 1; // primeira linha
		c.gridx = 3; // primeira coluna
		c.ipadx = 4;
		layout.setConstraints(nove, c);
		getContentPane().add(nove);

		c.gridy = 1; // primeira linha
		c.gridx = 4; // primeira coluna
		c.ipadx = 6;
		layout.setConstraints(divisao, c);
		getContentPane().add(divisao);

		//terceira linha
		c.gridy = 2; // primeira linha
		c.gridx = 0; // primeira coluna
		c.ipadx = 4;
		layout.setConstraints(funcao2, c);
		getContentPane().add(funcao2);

		c.gridy = 2; // primeira linha
		c.gridx = 1; // primeira coluna
		c.ipadx = 4;
		layout.setConstraints(quatro, c);
		getContentPane().add(quatro);

		c.gridy = 2; // primeira linha
		c.gridx = 2; // primeira coluna
		c.ipadx = 4;
		layout.setConstraints(cinco, c);
		getContentPane().add(cinco);

		c.gridy = 2; // primeira linha
		c.gridx = 3; // primeira coluna
		c.ipadx = 4;
		layout.setConstraints(seis, c);
		getContentPane().add(seis);

		c.gridy = 2; // primeira linha
		c.gridx = 4; // primeira coluna
		c.ipadx = 4;
		layout.setConstraints(multiplicacao, c);
		getContentPane().add(multiplicacao);

		//quarta linha
		c.gridy = 3; // primeira linha
		c.gridx = 0; // primeira coluna
		c.ipadx = 4;
		layout.setConstraints(funcao3, c);
		getContentPane().add(funcao3);

		c.gridy = 3; // primeira linha
		c.gridx = 1; // primeira coluna
		c.ipadx = 4;
		layout.setConstraints(um, c);
		getContentPane().add(um);

		c.gridy = 3; // primeira linha
		c.gridx = 2; // primeira coluna
		c.ipadx = 4;
		layout.setConstraints(dois, c);
		getContentPane().add(dois);

		c.gridy = 3; // primeira linha
		c.gridx = 3; // primeira coluna
		c.ipadx = 4;
		layout.setConstraints(tres, c);
		getContentPane().add(tres);

		c.gridy = 3; // primeira linha
		c.gridx = 4; // primeira coluna
		c.ipadx = 5;
		layout.setConstraints(subtracao, c);
		getContentPane().add(subtracao);

		//quinta linha
		c.gridy = 4; // primeira linha
		c.gridx = 0; // primeira coluna
		c.ipadx = 4;
		layout.setConstraints(funcao4, c);
		getContentPane().add(funcao4);

		c.gridy = 4; // primeira linha
		c.gridx = 1; // primeira coluna
		c.ipadx = 4;
		layout.setConstraints(zero, c);
		getContentPane().add(zero);

		c.gridy = 4; // primeira linha
		c.gridx = 2; // primeira coluna
		c.ipadx = 8;
		layout.setConstraints(virgula, c);
		getContentPane().add(virgula);

		c.gridy = 4; // primeira linha
		c.gridx = 3; // primeira coluna
		c.ipadx = 4;
		layout.setConstraints(resultado, c);
		getContentPane().add(resultado);

		c.gridy = 4; // primeira linha
		c.gridx = 4; // primeira coluna
		c.ipadx = 2;
		layout.setConstraints(soma, c);
		getContentPane().add(soma);

		//sexta linha
		c.gridy = 5; // primeira linha
		c.gridx = 3; // primeira coluna
		c.ipadx = 4;
		layout.setConstraints(backSpace, c);
		getContentPane().add(backSpace);

		c.gridy = 5; // primeira linha
		c.gridx = 4; // primeira coluna
		c.ipadx = 1;
		layout.setConstraints(limpar, c);
		getContentPane().add(limpar);

		zero.addActionListener(this);
		virgula.addActionListener(this);
		soma.addActionListener(this);
		resultado.addActionListener(this);
		um.addActionListener(this);
		dois.addActionListener(this);
		tres.addActionListener(this);
		quatro.addActionListener(this);
		cinco.addActionListener(this);
		seis.addActionListener(this);
		sete.addActionListener(this);
		oito.addActionListener(this);
		nove.addActionListener(this);
		subtracao.addActionListener(this);
		multiplicacao.addActionListener(this);
		divisao.addActionListener(this);
		limpar.addActionListener(this);
		tela.addActionListener(this);
		funcao1.addActionListener(this);
		funcao2.addActionListener(this);
		funcao3.addActionListener(this);
		funcao4.addActionListener(this);
		backSpace.addActionListener(this);

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setVisible(true);
	}
Criado 19 de maio de 2008
Ultima resposta 20 de mai. de 2008
Respostas 9
Participantes 3