Javafree
Página Inicial do Fórum > GUI - (Applets, Swing, SWT, etc)

Numeros de Linhas visiveis em um JTable??



Criar novo tópico   Responder tópico


  1. edpes
    Posts:4


    Comment Arrow

    Publicado em: 11/04/2016 16:24:14

    Oi Pessoal BLZ.

    Sei que pode parecer meio estupido, mas estou começando a estudar jTable.
    Já li alguns kilosde apostilas e nos livros também não encontro nada.
    Construi um jTable básico, jTableModel. para exibir 4 registros de DB.
    Esta funcionando muito bem , mas na tabela so aparecem 5 linhas
    com o scrool lateral.

    Pergunta
    Com eu faço para aparecerem mais linhas, invez de 6 umas 20 ??

    Grato.[color=darkblue][/color]



  1. staroski
    Posts:4599


    Comment Arrow

    Publicado em: 12/04/2016 07:31:25

    Se você criar o seu próprio TableModel, o que é recomendado, você vai sobrescrever o método "getRowCount()", esse método diz pra JTable quantas linhas ela possui

    Veja a documentação:
    https://docs.oracle.com/javase/7/docs/api/javax/swing/table/TableModel.html#getRowCount()
    _________________

    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC
    Faço seu trabalho Java,
    clique aqui

    Acesse http://www.guj.com.br/



  1. edpes
    Posts:4


    Comment Arrow

    Publicado em: 12/04/2016 11:16:47

    Oi.
    Veja este exemplo:
    Cria a práopria table.
    O que eu quero e exibir todos elementos ou um numero maior de elementos , não estopu entendendo porque uma table exibe 5 elelementos, outra 7 10, este exibe 15. como posso controlar o numero de elementos exibidos no frame.

    import javax.swing.*;
    import javax.swing.table.*;
    import java.util.*;
    import java.awt.*;

    /**
    * SimpleTableFrame.java
    * This class shows how to create a simple JTable
    * using table model
    *
    *
    */
    public class SimpleTableFrame extends JFrame
    {
    //JTable table
    private JTable m_simpleTable;
    //JTable model
    private SimpleTableModel m_simpleTableModel;

    /**
    * Constructor
    *
    * @return void
    * @exception
    */
    public SimpleTableFrame()
    {
    super("Simple Table Demo";


    m_simpleTableModel = new SimpleTableModel(getDummyData());


    m_simpleTable = new JTable(m_simpleTableModel);


    JScrollPane scrollPane = new JScrollPane(m_simpleTable);


    getContentPane().add(scrollPane);
    }

    /**
    * getDummyData
    * generating dummy MachineData object and creating a vector
    */
    private Vector getDummyData()
    {
    Vector dummyMacData = new Vector(50, 50);
    dummyMacData.addElement(new MachineData
    (new Integer(100), "Robert", "288.209.140.223",
    "Win NT", "Engineering");
    dummyMacData.addElement(new MachineData
    (new Integer(105), "Rahul", "288.209.140.214",
    "Solaris 5", "Engineering");
    dummyMacData.addElement(new MachineData
    (new Integer(110), "Daina", "288.209.140.220",
    "HP UX", "Engineering");
    dummyMacData.addElement(new MachineData
    (new Integer(106), "Vijay", "288.209.140.215",
    "Win NT", "Engineering");
    dummyMacData.addElement(new MachineData
    (new Integer(302), "Andy", "288.209.142.203",
    "Win 98", "Human Resource");
    dummyMacData.addElement(new MachineData
    (new Integer(504), "Tom", "288.209.141.207",
    "Win NT", "Marketing");
    dummyMacData.addElement(new MachineData
    (new Integer(104), "Bill", "288.209.140.222",
    "Win NT", "Engineering");
    dummyMacData.addElement(new MachineData
    (new Integer(100), "Robert", "288.209.140.223",
    "Win NT", "Engineering");
    dummyMacData.addElement(new MachineData
    (new Integer(105), "Rahul", "288.209.140.214",
    "Solaris 5", "Engineering");
    dummyMacData.addElement(new MachineData
    (new Integer(110), "Daina", "288.209.140.220",
    "HP UX", "Engineering");
    dummyMacData.addElement(new MachineData
    (new Integer(106), "Vijay", "288.209.140.215",
    "Win NT", "Engineering");
    dummyMacData.addElement(new MachineData
    (new Integer(302), "Andy", "288.209.142.203",
    "Win 98", "Human Resource");
    dummyMacData.addElement(new MachineData
    (new Integer(504), "Tom", "288.209.141.207",
    "Win NT", "Marketing");
    dummyMacData.addElement(new MachineData
    (new Integer(104), "Bill", "288.209.140.222",
    "Win NT", "Engineering");
    dummyMacData.addElement(new MachineData
    (new Integer(100), "Robert", "288.209.140.223",
    "Win NT", "Engineering");
    dummyMacData.addElement(new MachineData
    (new Integer(105), "Rahul", "288.209.140.214",
    "Solaris 5", "Engineering");
    dummyMacData.addElement(new MachineData
    (new Integer(110), "Daina", "288.209.140.220",
    "HP UX", "Engineering");
    dummyMacData.addElement(new MachineData
    (new Integer(106), "Vijay", "288.209.140.215",
    "Win NT", "Engineering");
    dummyMacData.addElement(new MachineData
    (new Integer(302), "Andy", "288.209.142.203",
    "Win 98", "Human Resource");
    dummyMacData.addElement(new MachineData
    (new Integer(504), "Tom", "288.209.141.207",
    "Win NT", "Marketing");
    dummyMacData.addElement(new MachineData
    (new Integer(104), "Bill", "288.209.140.222",
    "Win NT", "Engineering");

    return dummyMacData;
    }

    /**
    * main
    * main method, starting point
    */
    public static void main(String[] arg)
    {
    SimpleTableFrame m = new SimpleTableFrame();

    m.setVisible(true);
    m.setSize(new Dimension(600, 300));
    m.validate();
    }

    /**
    * SimpleTableModel.java
    * This class is the table nodel
    *
    * @author Rahul Sapkal(rahul@javareference.com)
    */
    public class SimpleTableModel extends AbstractTableModel
    {

    public static final int MAC_CODE_COL = 0;
    public static final int MAC_NAME_COL = 1;
    public static final int IP_COL = 2;
    public static final int OS_COL = 3;
    public static final int DOMAIN_COL = 4;


    public String[] m_colNames = {"Machine Code",
    "Machine Name",
    "IP Address",
    "Operating System",
    "Domain"};

    public Class[] m_colTypes = {Integer.class,
    String.class,
    String.class,
    String.class,
    String.class};


    Vector m_macDataVector;

    /**
    * Constructor
    */
    public SimpleTableModel(Vector macDataVector)
    {
    super();

    //store the data
    m_macDataVector = macDataVector;
    }




    public int getColumnCount()
    {
    return m_colNames.length;
    }

    /**
    * getRowCount
    * conta o numero de linhas
    */
    public int getRowCount()
    {
    return m_macDataVector.size();
    }


    /**
    * setValueAt
    * esta função atualiza os dados da tabela
    */
    public void setValueAt(Object value, int row, int col)
    {
    MachineData macData = (MachineData)(m_macDataVector.elementAt(row));

    switch(col)
    {
    case MAC_CODE_COL : macData.setMacCode((Integer) value);
    break;
    case MAC_NAME_COL : macData.setMacName((String) value);
    break;
    case IP_COL : macData.setMacIP((String) value);
    break;
    case OS_COL : macData.setMacOS((String) value);
    break;
    case DOMAIN_COL : macData.setMacDomain((String) value);
    break;
    }
    }




    public String getColumnName(int col)
    {
    return m_colNames[col];
    }



    public Class getColumnClass(int col)
    {
    return m_colTypes[col];
    }



    /**
    * getValueAt
    * Esta função atualiza a tabela
    */
    public Object getValueAt(int row, int col)
    {
    MachineData macData = (MachineData)(m_macDataVector.elementAt(row));

    switch(col)
    {
    case MAC_CODE_COL : return macData.getMacCode();
    case MAC_NAME_COL : return macData.getMacName();
    case IP_COL : return macData.getMacIP();
    case OS_COL : return macData.getMacOS();
    case DOMAIN_COL : return macData.getMacDomain();
    }



    return new String();
    }
    }


    public class MachineData {
    private Integer m_macCode;
    private String m_macName;
    private String m_macIP;
    private String m_macOS;
    private String m_macDomain;

    public MachineData()
    {
    }



    public MachineData(Integer macCode, String macName,
    String macIP, String macOS,
    String macDomain)
    {
    m_macCode = macCode;
    m_macName = macName;
    m_macIP = macIP;
    m_macOS = macOS;
    m_macDomain = macDomain;
    }

    public Integer getMacCode()
    {
    return m_macCode;
    }

    public String getMacName()
    {
    return m_macName;
    }

    public String getMacIP()
    {
    return m_macIP;
    }

    public String getMacOS()
    {
    return m_macOS;
    }

    public String getMacDomain()
    {
    return m_macDomain;
    }

    public void setMacCode(Integer macCode)
    {
    m_macCode = macCode;
    }

    public void setMacName(String macName)
    {
    m_macName = macName;
    }

    public void setMacIP(String macIP)
    {
    m_macIP = macIP;
    }

    public void setMacOS(String macOS)
    {
    m_macOS = macOS;
    }

    public void setMacDomain(String macDomain)
    {
    m_macDomain = macDomain;
    }
    }
    }



  1. staroski
    Posts:4599


    Comment Arrow

    Publicado em: 12/04/2016 13:32:22

    COmo eu disse, a JTable usa o getRowCount() pra saber quantas linhas ela possui, então se seu método getRowCount() retornar 5, ela vai renderizar 5 linhas, se ele retornar 1000, ela vai renderizar 1000 linhas, simples assim.

    Eu renomeei suas variáveis e incluí diversos comentários para ficar mais fácil de entender.

    Veja:


    _________________

    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC
    Faço seu trabalho Java,
    clique aqui

    Acesse http://www.guj.com.br/



  1. edpes
    Posts:4


    Comment Arrow

    Publicado em: 12/04/2016 16:50:01

    Valeu gostei muito enriqueceu demais muito grato.

    TAMBEM CONCEGUI UM EFEITO ESPERADO DE UM MODO MAIS SIMPLÓRIO, E SO UM TRECHO DO CODIGO SÃO TRÊS CLASSES

    public FormCadastro2(){
    super("Cadastro de contatos";
    jtcodigo =new JTextField(60);
    jtNome = new JTextField(60);
    jtEmail = new JTextField(60);
    label1 = new JLabel("codigo";
    label2 = new JLabel("nome";
    label3= new JLabel("E-mail";
    label1.setLabelFor(jtcodigo);
    label2.setLabelFor(jtNome);
    label3.setLabelFor(jtEmail);
    Container j = getContentPane();
    j.setLayout(new FlowLayout(FlowLayout.RIGHT));
    j.add(label1);
    j.add(jtcodigo);
    j.add(label2);
    j.add(jtNome);
    j.add(label3);
    j.add(jtEmail);
    j.add(jbInserir);
    jbInserir.addActionListener(this);

    modelo = new DefaultTableModel();

    jtable = new JTable(modelo);

    jtable.addMouseListener(this);
    modelo.addColumn("Codigo";
    modelo.addColumn("Nome";
    modelo.addColumn("E-mail";

    jtable.getColumnModel().getColumn(0).setPreferredWidth(30);

    rs = DAO.populaGrid();
    try {
    while (rs.next()){
    modelo.addRow(new Object[] {String.valueOf(rs.getString("codigo"),
    rs.getString("nome",rs.getString("email"});
    }
    } catch (SQLException e) {
    System.out.println(e.getMessage());
    }
    Container c = getContentPane();
    c.setLayout(new FlowLayout());

    JScrollPane scrollPane = new JScrollPane(jtable);
    c.add(scrollPane);
    c.setPreferredSize(new Dimension(800, 800));
    c.add(scrollPane);

    JPanel p1 = new JPanel();
    // p1.setLayout(null);
    p1.setPreferredSize(new Dimension(700,600));
    p1.add(scrollPane);
    scrollPane.setBounds(5,0,700,600);
    j.add(p1);

    }[/color][color=darkred]



  1. staroski
    Posts:4599


    Comment Arrow

    Publicado em: 13/04/2016 07:23:45

    Usando DefaultTableModel, você fez da forma menos recomendada.

    No DefaultTableModel você é obrigado a ficar inserindo ou removendo elementos do modelo.

    Sem contar que você só está inserindo Strings, você deveria ao menos ter classes pra representar as tabelas do banco.

    O seu método populaGrid() do DAO, não popula nada, ele retorna um ResultSet... Ele deveria retornar uma lista com os objetos encontrados.

    E essa lista deveria ser renderizada pelo modelo, como acontece no exemplo anterior que simplesmente renderizava uma lista de objetos, onde qualquer alteração na lista é refletida diretamente no TableModel.

    Sugiro que dê uma boa estudada em como implementar seu próprio TableModel, é bem melhor.

    Se continuar implementando dessa forma, com DefaultTableModel, seus códigos vão ficar uma bagunça.

    Talvez o material abaixo possa te ajudar:

    http://www.staroski.com.br/2014/12/12/apresentar-itens-jtable/

    Bons estudos.
    _________________

    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC
    Faço seu trabalho Java,
    clique aqui

    Acesse http://www.guj.com.br/



  1. edpes
    Posts:4


    Comment Arrow

    Publicado em: 13/04/2016 09:29:55


    esta certo criar o proprio modelo da mais flexibilidade para criar. o codigo estava imcompleto eu tenho os metodos e a classe de conexão. seguem:
    ESTAS CLASSES ESTÃO ATIVAS NO SISTEMA MAS SERAM SUBSTITUIDAS, POR CLASSES MELHORAS, SEGUINDO O MODELO SUGERIDO, ASSIM VOU ME
    ACOSTUMANDO A CONSTRUIR MINHAS PROPRIAS TABELAS, AGORA VOU BRINCAR UM POUQUINHO FAZER UM JOGO DA VELHA, BATALHA NAVAL E DAMAS
    PARA PRATICA O USO DOS METODOS DA API.
    MUITO GRATO
    ABRAÇÃO.

    import Estudo.ControleDAO2;
    import javax.swing.*; // Não faça isso só fiz por causa da preguiça
    import javax.swing.table.DefaultTableModel;
    import java.awt.*;
    import java.awt.event.*;
    import java.sql.ResultSet;
    import java.sql.SQLException;

    class FormCadastro2 extends JFrame implements ActionListener,
    MouseListener{
    private static final long serialVersionUID = 1L;

    JTextField jtNome, jtEmail, jtcodigo;

    JLabel label1,label2 ,label3;

    JButton jbInserir = new JButton("Inserir";

    ControleDAO2 DAO = new ControleDAO2();

    DefaultTableModel modelo;

    JTable jtable;
    // O JTable é a classe para exibir valores em grade (tipo um DBGrid pra vc
    // que usa o mouse em delphi.
    // O modelo é a referencia do JTable... o que vc fizer no modelo, o
    // JTable copia. Então, inclua linhas, remova linhas - SEMPRE - no modelo
    ResultSet rs;
    public FormCadastro2(){
    super("Cadastro de contatos";
    jtcodigo =new JTextField(60);
    jtNome = new JTextField(60);
    jtEmail = new JTextField(60);
    label1 = new JLabel("codigo";
    label2 = new JLabel("nome";
    label3= new JLabel("E-mail";
    label1.setLabelFor(jtcodigo);
    label2.setLabelFor(jtNome);
    label3.setLabelFor(jtEmail);
    Container j = getContentPane();
    j.setLayout(new FlowLayout(FlowLayout.RIGHT));
    j.add(label1);
    j.add(jtcodigo);
    j.add(label2);
    j.add(jtNome);
    j.add(label3);
    j.add(jtEmail);
    j.add(jbInserir);
    jbInserir.addActionListener(this);

    modelo = new DefaultTableModel();

    jtable = new JTable(modelo);

    jtable.addMouseListener(this);
    modelo.addColumn("Codigo";
    modelo.addColumn("Nome";
    modelo.addColumn("E-mail";

    jtable.getColumnModel().getColumn(0).setPreferredWidth(30);

    rs = DAO.populaGrid();
    try {
    while (rs.next()){
    modelo.addRow(new Object[] {String.valueOf(rs.getString("codigo"),
    rs.getString("nome",rs.getString("email"});
    }
    } catch (SQLException e) {
    System.out.println(e.getMessage());
    }
    Container c = getContentPane();
    c.setLayout(new FlowLayout());

    JScrollPane scrollPane = new JScrollPane(jtable);
    c.add(scrollPane);
    c.setPreferredSize(new Dimension(800, 800));
    c.add(scrollPane);

    JPanel p1 = new JPanel();
    // p1.setLayout(null);
    p1.setPreferredSize(new Dimension(700,600));
    p1.add(scrollPane);
    scrollPane.setBounds(5,0,700,600);
    j.add(p1);

    }
    public static void main(String args[]){
    FormCadastro2 app = new FormCadastro2();
    app.setDefaultCloseOperation(EXIT_ON_CLOSE);
    app.setSize(730,620);
    app.setLocationRelativeTo(null);
    app.setVisible(true);
    }

    public void actionPerformed(ActionEvent e){

    if (e.getSource()==jbInserir){
    if (DAO.novoRegistro(jtcodigo.getText() ,jtNome.getText(), jtEmail.getText()))
    JOptionPane.showMessageDialog(null,"Registro Incluido";
    modelo.addRow(new Object[] {jtcodigo.getText(),jtNome.getText(),jtEmail.getText()});
    }
    }

    public void mouseClicked(MouseEvent e) {
    Object[] options = { "Sim", "Não" };
    int i = JOptionPane.showOptionDialog(null,
    "Deseja realmente excluir este registro?\n" +

    String.valueOf(jtable.getValueAt(jtable.getSelectedRow(),0)) + " - " +
    String.valueOf(jtable.getValueAt(jtable.getSelectedRow(),1))
    , "Exclusão de registro",
    JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null,
    options, options[1]);
    if (i == JOptionPane.YES_OPTION) {
    DAO.excluir
    (String.valueOf(jtable.getValueAt(jtable.getSelectedRow(),0)));
    modelo.removeRow(jtable.getSelectedRow());
    }
    }

    public void mouseEntered(MouseEvent arg0) {
    System.out.println("Mouse Entra";

    }
    public void mouseExited(MouseEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("Mouse Sai";
    }
    public void mousePressed(MouseEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("Mouse Aperta";

    }
    public void mouseReleased(MouseEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("Mouse SOLTA";
    }
    }



    CLASSE DE CONEXÃO E QUERIES.


    import java.sql.*;
    import javax.swing.JOptionPane;
    public class ControleDAO2 {
    public Connection getConexao(){
    Connection conn = null;
    try {
    Class.forName("com.mysql.jdbc.Driver";
    } catch(ClassNotFoundException cl){
    exibeErro(cl.getMessage());
    }
    try {
    conn = DriverManager.getConnection("jdbc:mysql://localhost/cadastro",
    "root", "edson";
    } catch (SQLException e) {
    exibeErro(e.getMessage());
    }
    return conn;
    }

    public boolean novoRegistro(String codigo,String nome, String email){
    Connection conn = getConexao();
    String sql = "";
    sql = "insert into pessoas (codigo,nome, email) " +
    "values ('"+codigo+"','" + nome + "','"+email+"')";
    try {
    Statement stm = conn.createStatement();
    stm.executeUpdate(sql);
    return true;
    } catch (SQLException e) {
    exibeErro(e.getMessage());
    return false;
    }
    }

    private void exibeErro(String msg) {
    JOptionPane.showMessageDialog(null,msg);

    }

    public ResultSet populaGrid(){
    Connection conn = getConexao();
    Statement stm;
    String sql = "select * from pessoas ";
    try {
    stm = conn.createStatement();
    ResultSet rs = stm.executeQuery(sql);

    return rs;
    } catch (SQLException e) {
    exibeErro(e.getMessage());
    return null;
    }

    }

    public String getLastInsertID(){
    Connection conn = getConexao();
    Statement stm;
    String sql = "select codigo from pessoas ";
    try {
    stm = conn.createStatement();
    ResultSet rs = stm.executeQuery(sql);
    rs.next();
    return rs.getString("codigo";
    } catch (SQLException e) {
    exibeErro(e.getMessage());
    return "000F";
    }

    }
    public void excluir(String codigo){
    Connection conn = getConexao();

    try {
    Statement stm = conn.createStatement();
    stm.executeUpdate("delete from pessoas ";
    } catch (SQLException e) {
    exibeErro(e.getMessage());
    }
    }

    }

    CLASSE CONECTION FACTORY:


    import com.sun.corba.se.spi.orbutil.fsm.Guard;
    import java.sql.*;
    import javax.swing.table.DefaultTableModel;
    /**
    *
    * @author edson
    */
    public class Conection {
    //
    Connection conn;
    Statement st;
    ResultSet rt;
    PreparedStatement pstm;
    String sql="select * from produtos";
    public Conection() throws SQLException, ClassNotFoundException{
    try{
    Class.forName("com.mysql.jdbc.Driver";
    //Abrindo a conexão: ATENÇÃO OS DOIS PARÂMETROS VAZIOS("" SÃO USUÁRIO E SENHA, RESPECTIVAMENTE.
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/pet", "root", "edson";
    st=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
    java.sql.Statement st = conn.createStatement();
    }
    catch(ClassCastException ex2){
    throw ex2;
    }

    catch(SQLException e)
    {
    throw e;
    }

    }
    }



  1. Relacionados