2013-04-06 24 views
1

我有一個JFrame包含帶有JComboBox cmbTipo(values = Aluno和Funcionario)的JPanel「painelGeral」,我還有另外兩個JPanel:painelAluno和painelFuncionario,我希望其中一個將顯示在「painelGeral」下方,具體取決於我的JComboBox cmbTipo中的選定項目。 更準確地說,如果我的JComboBox(cmbTipo)選擇的值是'Aluno',那麼painelAluno會顯示在painelGeral下,如果我選擇的JComboBox(cmbTipo)的值是'Funcionario',那麼painelFuncionario會顯示爲 這裏是我的代碼,我已經試過到目前爲止做:根據我的jcombobox中的值加載不同的JPanel

package view; 

import java.awt.BorderLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 
import javax.swing.JButton; 
import javax.swing.JCheckBox; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class MembrosView extends JFrame implements ActionListener { 
    private JButton btnAdicionar, btnCancelar; 
    private JLabel lblTipo, lblNome, lblEmail, lblCelular, lblRa, lblCurso, 
      lblHabilitado, lblCpf, lblEndereco, lblNumero, lblComplemento; 
    private JTextField txtNome, txtEmail, txtCelular, txtRa, txtCpf, 
      txtEndereco, txtNumero, txtComplemento; 
    private JPanel painelPrincipal, painelBotoes, painelGeral, painelAluno, 
      painelFuncionario; 
    private String[] tipos = { "Aluno", "Funcionário" }; 
    private JComboBox cmbTipo, cmbCurso; 
    private JCheckBox ccbHabilitado; 

    public MembrosView() { 
     super("Manutenção de Membros"); 
     btnAdicionar = new JButton("Adicionar"); 
     btnCancelar = new JButton("Cancelar"); 

     // geral 
     lblNome = new JLabel("Nome:"); 
     lblEmail = new JLabel("Email:"); 
     lblCelular = new JLabel("Celular:"); 
     lblTipo = new JLabel("Tipo:"); 

     // aluno 
     lblRa = new JLabel("RA:"); 
     lblCurso = new JLabel("Curso:"); 
     lblHabilitado = new JLabel("Habilitado:"); 

     // professor 
     lblCpf = new JLabel("CPF:"); 
     lblEndereco = new JLabel("Endereço"); 
     lblNumero = new JLabel("Número:"); 
     lblComplemento = new JLabel("Complemento:"); 

     // geral 
     txtNome = new JTextField(20); 
     txtEmail = new JTextField(20); 
     txtCelular = new JTextField(20); 

     // aluno 
     txtRa = new JTextField(20); 
     cmbTipo = new JComboBox(tipos); 
     ccbHabilitado = new JCheckBox(); 
     cmbCurso = new JComboBox(); 
     // habilitado é checkbox 

     // professor 
     txtCpf = new JTextField(20); 
     txtEndereco = new JTextField(20); 
     txtNumero = new JTextField(20); 
     txtComplemento = new JTextField(20); 

     // botoes 
     btnAdicionar.addActionListener(this); 
     btnCancelar.addActionListener(this); 
     cmbTipo.addActionListener(this); 

     painelPrincipal = new JPanel(); 
     painelAluno = new JPanel(); 
     painelFuncionario = new JPanel(); 
     painelBotoes = new JPanel(); 
     painelGeral = new JPanel(); 

     painelGeral.setLayout(new GridLayout(4, 2)); 
     painelAluno.setLayout(new GridLayout(3, 2)); 
     painelPrincipal.setLayout(new BorderLayout()); 
     painelBotoes.setLayout(new GridLayout(4, 4)); 

     painelGeral.add(lblTipo); 
     painelGeral.add(cmbTipo); 
     painelGeral.add(lblNome); 
     painelGeral.add(txtNome); 
     painelGeral.add(lblEmail); 
     painelGeral.add(txtEmail); 
     painelGeral.add(lblCelular); 
     painelGeral.add(txtCelular); 

     painelAluno.add(lblRa); 
     painelAluno.add(txtRa); 
     painelAluno.add(lblCurso); 
     painelAluno.add(cmbCurso); 
     painelAluno.add(lblHabilitado); 
     painelAluno.add(ccbHabilitado); 

     painelFuncionario.add(lblCpf); 
     painelFuncionario.add(txtCpf); 
     painelFuncionario.add(lblEndereco); 
     painelFuncionario.add(txtEndereco); 
     painelFuncionario.add(lblNumero); 
     painelFuncionario.add(txtNumero); 
     painelFuncionario.add(lblComplemento); 
     painelFuncionario.add(txtComplemento); 

     painelAluno.setVisible(true); 
     painelFuncionario.setVisible(true); 

     painelPrincipal.add(painelGeral, BorderLayout.NORTH); 

     this.setContentPane(painelPrincipal); 
     this.setSize(400, 200); 
     this.setVisible(true); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public static void main(String[] args) { 
     MembrosView mv = new MembrosView(); 

    } 

    // se o tipo funcionario for ativado, mostra o painelFuncionario logo abaixo 
    // do painel Geral 
    // o mesmo pra aluno 
    // tentativas que eu fiz mas não deram certo 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     if (cmbTipo.getSelectedIndex() == 1) { 
      painelPrincipal.setSize(400, 600); 

      painelPrincipal.repaint(); 
      painelAluno.repaint(); 
      painelPrincipal.add(painelAluno, BorderLayout.SOUTH); 
     } 

     cmbTipo.addItemListener(new ItemListener() { 
      @Override 
      public void itemStateChanged(ItemEvent e) { 
       if (e.getStateChange() == ItemEvent.SELECTED) { 
        // int i = (int) 
        // e.getItemSelectable().getSelectedObjects()[0]; 
        int i = cmbTipo.getSelectedIndex(); 
        if (i == 1) { 
         painelPrincipal.setSize(400, 600); 
         painelPrincipal.add(painelAluno, BorderLayout.SOUTH); 
         painelPrincipal.repaint(); 
        } 
       } 
      } 
     }); 

    } 
} 
+0

你真的應該努力,至少把你的OP翻譯成英文和谷歌,你會提高你的機會得到至少90%的答案。 - Deberíashacer un esfuerzo y por lo menos traducir tu mensaje alingléscon Google,aumentarias tus posibilidades de recibir respuesta al menos un 90%。 – 2013-04-06 01:37:16

+0

完成!我希望這是好的 – migmig 2013-04-06 01:49:11

回答

0

在你ActionListener,您呼叫

painelPrincipal.repaint(); 

你添加新的面板painelAluno之前。這應該發生已添加面板已經重新生效後:

painelPrincipal.add(painelAluno, BorderLayout.SOUTH); 
painelPrincipal.revalidate(); 
painelPrincipal.repaint(); 
從這個 painelPrincipal.setSize(...)

除了有作爲您使用的是佈局管理器沒有任何影響。上面的代碼片段就足夠了。

+0

哦,謝謝你!現在它工作正常! – migmig 2013-04-06 02:03:58

相關問題