Como fazer com que um JcomboBox seja incluido em uma tabela

6 respostas
R

Bom dia caros colegas! estou fazendo uma pequena agenda em JAVA e tem apenas um erro, será que alguem consegue me dizer o que eu deveria escrever nesta linha com quatro barras na frente?

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package agenda;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author USUARIO
 */
public class Agenda2 extends JFrame implements ActionListener{
/**
 *
 * @author USUARIO
 */
	private static final long serialVersionUID = 1L;
	
	private JLabel  jlpesquisa, jlnome, jltelefone;
	private JTextField jtfnome, jtfpesquisa;
	private JFormattedTextField jftftelefone;
	private JTable table;
	private DefaultTableModel model;
	private JScrollPane jsp;
	private JButton salvar, excluir, alterar, limpar;

        private Vector<Pessoa> listaPessoas = new Vector<Pessoa>();
        private Vector<Integer> pesquisados = new Vector<Integer>();
        private JLabel jlcategoria;
        private JComboBox jcombocategoria;

    public Agenda2(){
		super("Turma");
		Container tela = getContentPane();
		tela.setLayout(null);
		setBounds(10, 10, 600, 600);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		jlpesquisa = new JLabel("PESQUISA");
		jlpesquisa.setBounds(10, 10, 70, 20);
		tela.add(jlpesquisa);
		
		jtfpesquisa = new JTextField();
		jtfpesquisa.setBounds(90, 10, 475, 20);
		jtfpesquisa.addKeyListener(new KeyAdapter(){
                public void keyReleased(KeyEvent e) {
                metodoBuscar(jtfpesquisa.getText());
            }
        });
		tela.add(jtfpesquisa);
		
		model = new DefaultTableModel(0,3);//new Object[][]{}, new Object[]{"Nome","Idade"});
                model.setColumnIdentifiers(new Object[]{"Categoria","Nome","Telefone"});
		table = new JTable(model);
                table.addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent evt) {
                if(evt != null && table.getSelectedRow() >= 0){
                    int index = pesquisados.get(table.getSelectedRow());
                    metodoCarregaPessoa(index);
                }
            }
        });
                jsp = new JScrollPane(table);
		jsp.setBounds(10, 40, 555, 250);
		tela.add(jsp);
                
                jlcategoria = new JLabel("CATEGORIA");
                jlcategoria.setBounds(10, 305, 80, 20);
                tela.add (jlcategoria);
                jcombocategoria = new JComboBox();
                jcombocategoria.setBounds(10, 330, 555, 20);
                jcombocategoria.addItem("AMIGO");
                jcombocategoria.addItem("PARENTE");
                jcombocategoria.addItem("TRABALHO");
                tela.add(jcombocategoria);   
		
		jlnome = new JLabel("NOME");
		jlnome.setBounds(10, 365, 50, 20);
		tela.add(jlnome);
		
		jtfnome = new JTextField();
		jtfnome.setBounds(10, 390, 555, 20);
		jtfnome.addActionListener(this);
		tela.add(jtfnome);
		
		jltelefone = new JLabel("TELEFONE");
		jltelefone.setBounds(10, 425, 80, 20);
		tela.add(jltelefone);
       		
		jftftelefone = new JFormattedTextField();
                jftftelefone.setBounds(10, 450, 555, 20);
                jftftelefone.addActionListener(this);
                tela.add(jftftelefone);
		
		salvar = new JButton("Salvar");
		salvar.setBounds(245, 540, 80, 20);
		salvar.addActionListener(this);
		tela.add(salvar);

		excluir = new JButton("Excluir");
		excluir.setBounds(330, 540, 80, 20);
		excluir.addActionListener(this);
		tela.add(excluir);

		alterar = new JButton("Alterar");
		alterar.setBounds(415, 540, 80, 20);
		alterar.addActionListener(this);
		tela.add(alterar);	
		
		limpar = new JButton("Limpar");
		limpar.setBounds(500, 540, 80, 20);
		limpar.addActionListener(this);
		tela.add(limpar);
        
	}

    private void metodoCarregaPessoa(int index){
        Pessoa pss = getListaPessoas().get(index);
     ////   jcombocategoria.setText(pss.getNome());
        jtfnome.setText(pss.getNome());
        jftftelefone.setText(String.valueOf(pss.getTelefone()));
    }

    private void metodoLimpar(){
        jtfnome.setText("");
        jftftelefone.setText("");
        jtfnome.requestFocus();
    }

    private void metodoSalvar(){
        Pessoa pss = new Pessoa();
        pss.setNome(jtfnome.getText());
        pss.setTelefone(Double.parseDouble(jftftelefone.getText()));

        getListaPessoas().add(pss);
    }

    private void metodoBuscar(String tx){
        //limpa/remove todos os dados do DefaultTableModel
        while(model.getRowCount() > 0){
            model.removeRow(0);
        }
        //limpa os pesquisados..
        pesquisados.removeAllElements();
        //verifica se o nome da pessoa começa com o texto informado..
        //e adiciona no model.
        for (int i = 0; i < getListaPessoas().size(); i++) {
            Pessoa pss = getListaPessoas().get(i);
            if(pss.getNome().toUpperCase().startsWith(tx.toUpperCase())){
                model.addRow(new Object[]{pss.getNome(),pss.getTelefone()});
                pesquisados.add(i);
            }
        }
        table.setModel(model);
    }

    private void metodoExcluir(){
        if(table.getSelectedRow() >= 0){
            int index = pesquisados.get(table.getSelectedRow());
            getListaPessoas().remove(index);
        }
    }

    private void metodoAlterar(){
        if(table.getSelectedRow() >= 0){
            int index = pesquisados.get(table.getSelectedRow());
            getListaPessoas().get(index).setNome(jtfnome.getText());
            getListaPessoas().get(index).setTelefone(Integer.parseInt(jftftelefone.getText()));
        }
    }

	public void actionPerformed(ActionEvent ae) {
        if(ae.getSource() == limpar){
            metodoLimpar();
        }else if(ae.getSource() == salvar || ae.getSource() == jftftelefone){
            metodoSalvar();
            metodoBuscar("");
            metodoLimpar();
        }else if(ae.getSource() == excluir){
            metodoExcluir();
            metodoBuscar("");
            metodoLimpar();
        }else if(ae.getSource() == alterar){
            metodoAlterar();
            metodoBuscar("");
            metodoLimpar();
        }
	}
	
	public static void main(String x[]){
		Agenda2 t = new Agenda2();
        t.setVisible(true);
        t.metodoLimpar();
	}



    
    /**
     * @return the listaPessoas
     */
    public Vector<Pessoa> getListaPessoas() {
        return listaPessoas;
    }

    /**
     * @param listaPessoas the listaPessoas to set
     */
    public void setListaPessoas(Vector<Pessoa> listaPessoas) {
        this.listaPessoas = listaPessoas;
    }
}

6 Respostas

lina

Oi,

Na próxima vez em que postar, utilize a tag no inicio de sua codificação e no final, ok? Ficará mais facil para visualização…

Antes de postar: http://www.guj.com.br/posts/list/50115.java

Bem vindo ao guj! aguarde que sua pergunta provavelmente terá uma solução…

Tchauzin!

lina

Oi,

Você deverá utilizar o método setCellEditor():

combo = new JComboBox(); // Combo criado... table.getColumn(table.getColumnName(<indice da coluna>)).setCellEditor(new DefaultCellEditor(combo));

Tchauzin!

R

como estou iniciando nao sei inserir este codigo dentro do meu codigo, voce poderia me explicar melhor?

lina

Oi,

Segue:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package agenda;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author USUARIO
 */
public class Agenda2 extends JFrame implements ActionListener{
/**
 *
 * @author USUARIO
 */
	private static final long serialVersionUID = 1L;
	
	private JLabel  jlpesquisa, jlnome, jltelefone;
	private JTextField jtfnome, jtfpesquisa;
	private JFormattedTextField jftftelefone;
	private JTable table;
	private DefaultTableModel model;
	private JScrollPane jsp;
	private JButton salvar, excluir, alterar, limpar;

        private Vector<Pessoa> listaPessoas = new Vector<Pessoa>();
        private Vector<Integer> pesquisados = new Vector<Integer>();
        private JLabel jlcategoria;
        private JComboBox jcombocategoria;

    public Agenda2(){
		super("Turma");
		Container tela = getContentPane();
		tela.setLayout(null);
		setBounds(10, 10, 600, 600);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		jlpesquisa = new JLabel("PESQUISA");
		jlpesquisa.setBounds(10, 10, 70, 20);
		tela.add(jlpesquisa);
		
		jtfpesquisa = new JTextField();
		jtfpesquisa.setBounds(90, 10, 475, 20);
		jtfpesquisa.addKeyListener(new KeyAdapter(){
                public void keyReleased(KeyEvent e) {
                metodoBuscar(jtfpesquisa.getText());
            }
        });
		tela.add(jtfpesquisa);
		
		model = new DefaultTableModel(0,3);//new Object[][]{}, new Object[]{"Nome","Idade"});
                model.setColumnIdentifiers(new Object[]{"Categoria","Nome","Telefone"});
		table = new JTable(model);
                table.addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent evt) {
                if(evt != null && table.getSelectedRow() >= 0){
                    int index = pesquisados.get(table.getSelectedRow());
                    metodoCarregaPessoa(index);
                }
            }
        });
                jsp = new JScrollPane(table);
		jsp.setBounds(10, 40, 555, 250);
		tela.add(jsp);
                
                jlcategoria = new JLabel("CATEGORIA");
                jlcategoria.setBounds(10, 305, 80, 20);
                tela.add (jlcategoria);
                jcombocategoria = new JComboBox();
                jcombocategoria.setBounds(10, 330, 555, 20);
                jcombocategoria.addItem("AMIGO");
                jcombocategoria.addItem("PARENTE");
                jcombocategoria.addItem("TRABALHO");
                tela.add(jcombocategoria);   

               //
               // AQUI ESTÁ O CODIGO (NO LUGAR DE '1' você deverá colocar qual coluna vc quer o combo.
               //
                table.getColumn(table.getColumnName(1)).setCellEditor(new DefaultCellEditor(jcombocategoria));
		

		jlnome = new JLabel("NOME");
		jlnome.setBounds(10, 365, 50, 20);
		tela.add(jlnome);
		
		jtfnome = new JTextField();
		jtfnome.setBounds(10, 390, 555, 20);
		jtfnome.addActionListener(this);
		tela.add(jtfnome);
		
		jltelefone = new JLabel("TELEFONE");
		jltelefone.setBounds(10, 425, 80, 20);
		tela.add(jltelefone);
       		
		jftftelefone = new JFormattedTextField();
                jftftelefone.setBounds(10, 450, 555, 20);
                jftftelefone.addActionListener(this);
                tela.add(jftftelefone);
		
		salvar = new JButton("Salvar");
		salvar.setBounds(245, 540, 80, 20);
		salvar.addActionListener(this);
		tela.add(salvar);

		excluir = new JButton("Excluir");
		excluir.setBounds(330, 540, 80, 20);
		excluir.addActionListener(this);
		tela.add(excluir);

		alterar = new JButton("Alterar");
		alterar.setBounds(415, 540, 80, 20);
		alterar.addActionListener(this);
		tela.add(alterar);	
		
		limpar = new JButton("Limpar");
		limpar.setBounds(500, 540, 80, 20);
		limpar.addActionListener(this);
		tela.add(limpar);
        
	}

    private void metodoCarregaPessoa(int index){
        Pessoa pss = getListaPessoas().get(index);
     ////   jcombocategoria.setText(pss.getNome());
        jtfnome.setText(pss.getNome());
        jftftelefone.setText(String.valueOf(pss.getTelefone()));
    }

    private void metodoLimpar(){
        jtfnome.setText("");
        jftftelefone.setText("");
        jtfnome.requestFocus();
    }

    private void metodoSalvar(){
        Pessoa pss = new Pessoa();
        pss.setNome(jtfnome.getText());
        pss.setTelefone(Double.parseDouble(jftftelefone.getText()));

        getListaPessoas().add(pss);
    }

    private void metodoBuscar(String tx){
        //limpa/remove todos os dados do DefaultTableModel
        while(model.getRowCount() > 0){
            model.removeRow(0);
        }
        //limpa os pesquisados..
        pesquisados.removeAllElements();
        //verifica se o nome da pessoa começa com o texto informado..
        //e adiciona no model.
        for (int i = 0; i < getListaPessoas().size(); i++) {
            Pessoa pss = getListaPessoas().get(i);
            if(pss.getNome().toUpperCase().startsWith(tx.toUpperCase())){
                model.addRow(new Object[]{pss.getNome(),pss.getTelefone()});
                pesquisados.add(i);
            }
        }
        table.setModel(model);
    }

    private void metodoExcluir(){
        if(table.getSelectedRow() >= 0){
            int index = pesquisados.get(table.getSelectedRow());
            getListaPessoas().remove(index);
        }
    }

    private void metodoAlterar(){
        if(table.getSelectedRow() >= 0){
            int index = pesquisados.get(table.getSelectedRow());
            getListaPessoas().get(index).setNome(jtfnome.getText());
            getListaPessoas().get(index).setTelefone(Integer.parseInt(jftftelefone.getText()));
        }
    }

	public void actionPerformed(ActionEvent ae) {
        if(ae.getSource() == limpar){
            metodoLimpar();
        }else if(ae.getSource() == salvar || ae.getSource() == jftftelefone){
            metodoSalvar();
            metodoBuscar("");
            metodoLimpar();
        }else if(ae.getSource() == excluir){
            metodoExcluir();
            metodoBuscar("");
            metodoLimpar();
        }else if(ae.getSource() == alterar){
            metodoAlterar();
            metodoBuscar("");
            metodoLimpar();
        }
	}
	
	public static void main(String x[]){
		Agenda2 t = new Agenda2();
        t.setVisible(true);
        t.metodoLimpar();
	}



    
    /**
     * @return the listaPessoas
     */
    public Vector<Pessoa> getListaPessoas() {
        return listaPessoas;
    }

    /**
     * @param listaPessoas the listaPessoas to set
     */
    public void setListaPessoas(Vector<Pessoa> listaPessoas) {
        this.listaPessoas = listaPessoas;
    }
}

Tchauzin!

R

mas a tela funciona da seguinte forma
exista a tabela e logo abaixo os campos para cadastrar:
categoria
nome
telefone

se eu colocar desta forma que voce me falou a opcao de categoria ja fica na tabela, mas eu preciso na verdade e selecionar junto com os campos abaixo da tabela e quando eu clicar em salvar e que ele va pra tabela apenas a informacao

lina

Oi,

Realmente sua dúvida não ficou clara. Olhe seu titulo:

Como fazer com que um JcomboBox seja incluido em uma tabela

Você quer saber como pegar o valor do combo?

combo.getSelectedItem().toString();

Tchaucin!

Criado 21 de setembro de 2009
Ultima resposta 21 de set. de 2009
Respostas 6
Participantes 2