Pessoal, boa noite. Essa é minha nova conta aqui no GUJ, pois perdi a senha e o email da outra bem antiga que tinha.
Bem, resolvi estudar Java novamente, pois tenho um aplicativo pequeno para fazer. Então estou com uma dúvida grande com componentes Swing, especificamente com CardLayout.
Pesquisei no fórum, mas não encontrei a resposta para o problema.
Pois bem, vamos ao problema. Para praticar estou desenvolvendo uma calculadora de Juros Compostos ue em um CardLayout calcula o Montante de uma aplicação após um certo período informando-se o capital e a taxa. Em outros dois CardLayouts essa aplicação deve calcular o capital informando os outros parâmetros e no terceiro CardLayout o período da aplicação informado-se os outros parâmetros.
O probelma que estou tendo é que apenas o painel CardLayout para se calcular o capital aparece no BordeLayout. O painel para se calcular o Montante aparece apenas o botão para se calcular tal Montante, mas não aperece nem os JLabels e nem os TextFields para se informar os parêmetros. Esse mesmo problema ocorre com o painel para se calcular o período, sendo que quando o peinel para o cálculo do capital está visível ao se clicar no botão período não ocorre nada, porém se clicarmos no botão para apresentação do painel montante o Frame é limpo, ou seja, o botão montante serve para se limpar to Frame.
Também gostaria de saber como posso limitar o tamanho dos botões, pois eles preenchem toda a área do BorderLayout.
O código da Classe está abaixo, caso algém possa avaliá-lo e detectar o probelma, ficaria muito grato.
package jurosCompostos;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class JurosCompostos extends JFrame implements ActionListener
{
JPanel painelEscolha, painelCard, painelMontante, painelPeriodo, painelCapital,
painelSuperior, painelCardCampos, painelCardBotao, painelCardResults,
painelGridCapital, painelGridMontante, painelGridPeriodo;
JButton botaoCalcular, botaoLimpar, botaoMontante, botaoPeriodo, botaoCapital,
botaoCalculaMontante, botaoCalculaPeriodo, botaoCalculaCapital;
JLabel labelCapital, labelPeriodo, labelPercentual, labelMontante, labelDesejo;
JTextField tfCapital, tfPeriodo, tfPercentual, tfMontante;
JurosCompostos()
{
setTitle("Calculando Propriedades Dos Juros Compostos");
setBounds(500, 250, 280, 200);
getContentPane().setBackground(Color.BLUE);
getContentPane().setLayout(new BorderLayout());
// Botões para calcular os parâmetros desejados
botaoCalculaMontante = new JButton("Calcular Montante"); // botaoCalcular.addActionListener(this);
//botaoCalculaMontante.setPreferredSize(new Dimension(150, 25));
botaoCalculaPeriodo = new JButton("Calcular Período");
botaoCalculaCapital = new JButton("Calcular Capital");
// Botão para limpar os campos e botões para se escolher o que se deseja calcular
botaoLimpar = new JButton("Limpar"); // botaoLimpar.addActionListener(this);
botaoMontante = new JButton("Montante"); botaoMontante.addActionListener(this);
botaoPeriodo = new JButton("Período"); botaoPeriodo.addActionListener(this);
botaoCapital = new JButton("Capital"); botaoCapital.addActionListener(this);
// Labels para se informar os parâmetros a serem digitados
labelCapital = new JLabel("Capital");
labelPeriodo = new JLabel("Período");
labelPercentual = new JLabel("Percentual");
labelMontante = new JLabel("Montante");
labelDesejo = new JLabel("O que deseja calcular", JLabel.CENTER);
// TextFields para se digitar os parâmetros
tfCapital = new JTextField(8);
tfPeriodo = new JTextField(3);
tfPercentual = new JTextField(2);
tfMontante = new JTextField(8);
// Painel superior. Tem o objetivo de apresentar a mensagem perguntando o que se deseja calcular
// e também contém o painel que contém os botões para a escolha.
painelSuperior = new JPanel(); painelSuperior.setLayout(new GridLayout(2, 1));
painelSuperior.add(labelDesejo);
// Painel escolha. Esse painel contém os botões para a escolha e será inserido no painelSuperior.
painelEscolha = new JPanel(); painelEscolha.setLayout(new GridLayout(1, 3));
painelEscolha.add(botaoMontante); painelEscolha.add(botaoCapital); painelEscolha.add(botaoPeriodo);
painelSuperior.add(painelEscolha); // Adiciona o painelEscolha no painelSuperior
// painelGridMontante. Contém os Labels e os TextFields para se calcular o montante.
// Esse paniel será inserido no painelMontante a seguir.
painelGridMontante = new JPanel(); painelGridMontante.setLayout(new GridLayout(4, 2));
painelGridMontante.add(labelCapital); painelGridMontante.add(tfCapital);
painelGridMontante.add(labelPercentual); painelGridMontante.add(tfPercentual);
painelGridMontante.add(labelPeriodo); painelGridMontante.add(tfPeriodo);
painelGridMontante.add(labelMontante); painelGridMontante.add(tfMontante);
// painelMontante. Esse painel contém o painelGridMontante e o botão que receberá o evento para tal cálculo.
painelMontante = new JPanel(); painelMontante.setLayout(new BorderLayout());
painelMontante.add("North", painelGridMontante);
painelMontante.add("Center", botaoCalculaMontante);
// painelGridPeriodo. Contém os Labels e os TextFields para se calcular o período.
painelGridPeriodo = new JPanel(); painelGridPeriodo.setLayout(new GridLayout(4, 2));
painelGridPeriodo.add(labelCapital); painelGridPeriodo.add(tfCapital);
painelGridPeriodo.add(labelMontante); painelGridPeriodo.add(tfMontante);
painelGridPeriodo.add(labelPercentual); painelGridPeriodo.add(tfPercentual);
painelGridPeriodo.add(labelPeriodo); painelGridPeriodo.add(tfPeriodo);
// painelPeriodo. Esse painel contém o painel gridPeriodo e o botão para se calcular o período.
painelPeriodo = new JPanel(); painelPeriodo.setLayout(new BorderLayout());
painelPeriodo.add("North", painelGridPeriodo);
painelPeriodo.add("Center", botaoCalculaPeriodo);
// painelGridCapital. Contém os Labels e os TextFields para se calcular o capital.
// Esse painel será inserido no painelCapital a seguir.
painelGridCapital = new JPanel(); painelGridCapital.setLayout(new GridLayout(4, 2));
painelGridCapital.add(labelMontante); painelGridCapital.add(tfMontante);
painelGridCapital.add(labelPercentual); painelGridCapital.add(tfPercentual);
painelGridCapital.add(labelPeriodo); painelGridCapital.add(tfPeriodo);
painelGridCapital.add(labelCapital); painelGridCapital.add(tfCapital);
// painelCapital. Esse painel contém o painelGridCapital e o botão para se calcular o capital.
painelCapital = new JPanel(); painelCapital.setLayout(new BorderLayout());
painelCapital.add("North", painelGridCapital);
painelCapital.add("Center", botaoCalculaCapital);
// painelCard. Esse painel recebe os painéis painelMontante, painelCapital e painelPeriodo.
painelCard = new JPanel(); painelCard.setLayout(new CardLayout());
painelCard.add(painelMontante, "Montante");
painelCard.add(painelCapital, "Capital");
painelCard.add(painelPeriodo, "Período");
// Insere no Frame o peinelSuperior e o painelCard.
getContentPane().add("North", painelSuperior);
getContentPane().add("South", painelCard);
}
public void actionPerformed(ActionEvent e)
{
CardLayout card = (CardLayout) painelCard.getLayout();
if(e.getSource() == botaoMontante)
card.show(painelCard, "Montante");
if(e.getSource() == botaoCapital)
card.show(painelCard, "Capital");
if(e.getSource() == botaoPeriodo)
card.show(painelCard, "Periodo");
}
}
E então, algué pode dar uma ajuda?
Agradeço desde já a colaboração. Muito obrigado.