Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > вывод полей БД в таблицу при нажатии кнопки


Автор: tooncheg 5.12.2014, 12:46
собственно сама таблица, там установлен слушатель на кнопку search от которой я хочу чтобы при ее нажатии выводились нужные строки из БД в мою таблицу.

Код

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;


public class TableMain extends JFrame{

    private  TableModel tm;
    JTextField nameField;
    JTextField dateField;
    
    public TableMain() throws ClassNotFoundException, SQLException  {
        
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        tm = new TableModel();
        JTable table = new JTable(tm);
        getContentPane().add(new JScrollPane(table));
        JButton search = new JButton("Search");
        JButton remove = new JButton("Delete");
        JButton clear = new JButton("Clear");
        JPanel jpButtons = new JPanel();
        jpButtons.add(search);
        jpButtons.add(remove);
        jpButtons.add(clear);
        
        getContentPane().add(jpButtons, "South");
        
        nameField = new JTextField(20);
        dateField = new JTextField(5);
        JLabel jlabel = new JLabel("Search :");
        JPanel jpTextField = new JPanel();
        jpTextField.add(jlabel);
        jpTextField.add(nameField);
        jpTextField.add(dateField);
        
        
        getContentPane().add(jpTextField,"North");
        
        
        
        remove.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                tm.deleteRow();
             }
        });
        // хочу чтобы при нажатии на кнопку search выводились нужные строки из БД
        search.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                
                if(nameField.getText().trim().length()>0){}
                  
            }
        });
        
        clear.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
              tm.clearAll();
            }
        });
        
        setSize(500, 400);
        setVisible(true);
    }

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        new TableMain();
        
    }
}


модель таблицы

Код

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import javax.swing.table.AbstractTableModel;


public class TableModel extends AbstractTableModel{

     
     List<String> columnNames = Arrays.asList("id","name","year_birth");
     List<Table> data = new ArrayList<>();
     ArrayList<String[]> datatemp;
     Connection conn;
     Table table;
      
     public TableModel() throws ClassNotFoundException, SQLException{
         ConnectJdbc connJ = new ConnectJdbc();
         conn = connJ.getConnection();
         PreparedStatement ps = conn.prepareStatement("SELECT * FROM testBD.new_table");
         
         ResultSet rs = ps.executeQuery();
         while(rs.next()){
           table = new Table(); 
           table.setId_name(rs.getString("id_name"));
           table.setName(rs.getString("name"));
           table.setDate_birth(rs.getString("date_birth"));
          data.add(table);
      }
     }
          
     public void search() throws SQLException, ClassNotFoundException{
        
        
         datatemp = new ArrayList<>();
            for (int i = 0; i < data.size(); i++) {
             datatemp.add(new String[]{data.get(i).getId_name(),data.get(i).getName(),
             data.get(i).getDate_birth()});
         }
           
    } 
 @Override
    public int getRowCount() {
        return data.size();

    }

    @Override
    public int getColumnCount() {
        return columnNames.size();

    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
       return datatemp.get(rowIndex)[columnIndex];

    }

    @Override
    public String getColumnName(int column) {
        return columnNames.get(column);
    }
    
 
    public void setValueAt(String[] data) {
//        this.data.add(data);
        this.fireTableDataChanged();
    }
    
    
    
    public void deleteRow(){
      
      data.remove(getRowCount()-1);
      this.fireTableDataChanged();
    }

    public void clearAll(){
      data.clear();
      this.fireTableDataChanged();
    }
    
}


соединение с базой
Код

 @Override
    public int getRowCount() {
        return data.size();

    }

    @Override
    public int getColumnCount() {
        return columnNames.size();

    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
       return datatemp.get(rowIndex)[columnIndex];

    }

    @Override
    public String getColumnName(int column) {
        return columnNames.get(column);
    }
    
 
    public void setValueAt(String[] data) {
//        this.data.add(data);
        this.fireTableDataChanged();
    }
    
    
    
    public void deleteRow(){
      
      data.remove(getRowCount()-1);
      this.fireTableDataChanged();
    }

    public void clearAll(){
      data.clear();
      this.fireTableDataChanged();
    }
    
    
    
}




Код

public class Table {
  
  private String id_name;
  private String name;
  private String date_birth;
  

    public String getId_name() {
        return id_name;
    }

    public void setId_name(String id_name) {
        this.id_name = id_name;
    }

    public String getName() {
        return name;
    }

    public String getDate_birth() {
        return date_birth;
    }

    public void setDate_birth(String date_birth) {
        this.date_birth = date_birth;
    }

    public void setName(String name) {
        this.name = name;
    }
  
  
}



Добавлено @ 12:52
У самого не получается как я понимаю по такой причине: когда вызываю модель таблицы, то создается эта самая таблица, но она пустая так  данные datatemp заполняются после вызова метода search( ). как решить эту проблемку

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)