5 августа 2011 г.

Swing JTable пример использования DefaultTableModel

Простой пример использования JTable в Swing, с интерактивным добавлением строк в таблицу. Для реализации данного примера будем использовать DefaultTableModel.




  1. import java.awt.BorderLayout;  
  2. import java.awt.EventQueue;  
  3.   
  4. import javax.swing.JFrame;  
  5. import javax.swing.JPanel;  
  6. import javax.swing.border.EmptyBorder;  
  7. import javax.swing.table.DefaultTableModel;  
  8. import javax.swing.JScrollPane;  
  9. import javax.swing.JButton;  
  10. import javax.swing.JTable;  
  11. import java.awt.event.MouseAdapter;  
  12. import java.awt.event.MouseEvent;  
  13.   
  14.   
  15. public class start extends JFrame {  
  16.   
  17.  private JPanel contentPane;  
  18.  private JTable table;  
  19.  private DefaultTableModel model;  
  20.   
  21.  public static void main(String[] args) {  
  22.   EventQueue.invokeLater(new Runnable() {  
  23.    public void run() {  
  24.     try {  
  25.      start frame = new start();  
  26.      frame.setVisible(true);  
  27.     } catch (Exception e) {  
  28.      e.printStackTrace();  
  29.     }  
  30.    }  
  31.   });  
  32.  }  
  33.   
  34.    
  35.  public start() {  
  36.   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  37.   setBounds(100100450300);  
  38.   contentPane = new JPanel();  
  39.   contentPane.setBorder(new EmptyBorder(5555));  
  40.   contentPane.setLayout(new BorderLayout(00));  
  41.   setContentPane(contentPane);   
  42.   
  43. /* 
  44. Создадим экземпляр класса DefaultTableModel и перегрузим 
  45. в нем метод isCellEditable. Так как isCellEditable всегда 
  46. возвращает true, то абсолютно все ячейки являются  
  47. редактируемыми 
  48. */  
  49.   model = new DefaultTableModel(){  
  50.    @Override  
  51.    public boolean isCellEditable(int row, int column){  
  52.     return true;  
  53.    };     
  54.   };  
  55. /* 
  56. Добавим столбцы и заполним их шапку 
  57. */  
  58.   model.addColumn("Фамилия");  
  59.   model.addColumn("Имя");  
  60.   model.addColumn("Год");  
  61.                   
  62. /* 
  63. Если не использовать JScrollPane тогда не будут видны  
  64. заголовки столбцов нашей таблицы 
  65. */  
  66.   JScrollPane scrollPane = new JScrollPane();  
  67.   contentPane.add(scrollPane, BorderLayout.CENTER);  
  68.     
  69. /* 
  70. Создадим таблицу и передадим в качесве параметра, 
  71. передадим нашу модель   
  72. */  
  73.   table = new JTable(model);  
  74.   scrollPane.setViewportView(table);  
  75.     
  76.   JPanel panel = new JPanel();  
  77.   contentPane.add(panel, BorderLayout.SOUTH);  
  78.     
  79.   JButton btnNewButton = new JButton("Добавить");  
  80.   btnNewButton.addMouseListener(new MouseAdapter() {  
  81.    @Override  
  82.    public void mouseClicked(MouseEvent arg0) {  
  83.    String[] data= { "Иванов""Петр""1990" };  
  84. //Добавим строку data в таблицу   
  85.    model.addRow(data);  
  86.    }  
  87.   });  
  88.   panel.add(btnNewButton);  
  89.  }  
  90.   
  91. }