2013-04-23 4 views
-2

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

package addPanel;

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


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","" }; 
         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(20, 20, 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 для повторного вопроса без какого-либо прогресса – mKorbel

ответ

1

Похоже, вы пытаетесь поставить JButton экземпляр в TableModel. Вместо этого вам понадобится TableCellEditor, обсужденный here. Table Button Column предлагает хорошее объяснение, и это related example может быть полезно.

1

Это работает для меня. Используйте столбец с именем "" и установите его в JButton.

Сделайте свою собственную модель таблицы вроде следующего:

public class TableElementModel extends DefaultTableModel{ 

    String[ ] columnName = { "Id","First Name", "Last Name","" }; 
    @Override 
     public int getColumnCount() { 
      return columnName.size(); 
     } 
     @Override 
     public Class<?> getColumnClass(int columnIndex) { 
      switch (columnIndex) { 
       case 4: 
        return JButton.class; 
       default: 
        return super.getColumnClass(columnIndex); 
      } 
     } 
} 

Затем измените визуализатор для этого столбца

Table.getColumn("").setCellRenderer((table, value, isSelected, hasFocus, row, column) -> { 
    return (JButton)value; 
    }); 
Смежные вопросы