2013-04-23 3 views
0

Я хочу добавить JButton в таблицу. Я использую таблицу для отображения записей базы данных. На самом деле я хочу добавить кнопку для каждой записи в таблице, но кнопка не отображается в таблице. Он не показывает никаких ошибок. Пожалуйста помоги. Заранее спасибо.Добавление компонента в JTable

package addPanel; 

import java.sql.*; 
import javax.swing.*; 
import javax.swing.table.DefaultTableModel; 

public class panelShowData extends JPanel 
{ 



    Connection connection = null; 
    Statement statement = null; 
    ResultSet resultSet = null; 

    String url = "jdbc:mysql://localhost:3306/records"; 
    String driver = "com.mysql.jdbc.Driver"; 
    String userName = "root"; 
    String password = ""; 

    JScrollPane scrollPane; 
    JTable table; 
    DefaultTableModel tableModel; 

    String nameSearch=""; 


    public panelShowData() 
    { 

     this.setLayout(null); 
     setVisible(true); 
     setBounds(0, 200, 500, 450); 
    } 

    public void searchData(String nameSearch) 
    { 

     tableModel = new DefaultTableModel(); 

      try 
      {   
       Class.forName(driver).newInstance(); 
       connection = DriverManager.getConnection(url, userName, password); 

       statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
            ResultSet.CONCUR_UPDATABLE); 

       resultSet = statement.executeQuery("select * from registration where firstname='" 
            + nameSearch 
           + "'or lastname ='" 
           + nameSearch + "'"); 

       System.out.println("Query executed"); 
       System.out.println("nameSearch="+nameSearch); 

       String firstName; 
       String lastName; 
       int id; 

       JButton add=new JButton("ADD"); 

        while (resultSet.next()) 
        {  
         System.out.print(resultSet.getString(2) + "\t"); 
         System.out.print(resultSet.getString(4) + "\n"); 

         firstName = resultSet.getString(2); 
         lastName = resultSet.getString(4); 
         id = resultSet.getInt(1); 

         String[ ] columnName = { "Id","First Name", "Last Name","click" }; 
         Object[ ] data = { id, ""+firstName, "" + lastName, add }; 


         System.out.println("Names is:"+firstName); 
         tableModel.setColumnIdentifiers(columnName); 
         tableModel.addRow(data); 
         tableModel.fireTableDataChanged(); 
        } 

       table = new JTable(tableModel); 
       table.setEnabled(false); 
       scrollPane = new JScrollPane(table); 
       scrollPane.setBounds(10, 10, 350, 100); 
       scrollPane.revalidate(); 
       scrollPane.repaint(); 

       add(scrollPane); 
       connection.close(); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
       JOptionPane.showMessageDialog( null, "Record Not Found", 
           "Sorry", JOptionPane.ERROR_MESSAGE); 
      } 
    } 
} 

ответ

1
  1. все строки кода в вашем посте важные причины, почему ResultSetTableModel, TableFromDatabase (и/или ссылаться JDBC из SwingWorker, Runnable # Thread) находятся там
  2. никогда не называть tableModel.fireTableDataChanged() ;,
    • вне XxxTableModel Defintion
    • DefaultTableModel реализовал эту уведомителя и правильно
    • ваш код повторно чтобы переопределить это уведомление, потому что говорить о Concurency in Swing (Oracle tutorial), снова о моей точке 1-го.
  3. все самое важное есть, пожалуйста, к read this answer about ListModel and JList, все точки, тот же вопрос,
  4. JPanel имеет FlowLayout реализован в API, никаких оснований для использования NullLayout, не измените BorderLayout
  5. переопределения GetPreferredSize для разумного измерения для JPanel, содержит JTable, завернутые в JScrollPane
  6. JButton added in JTable is here solved a few times
Смежные вопросы