Computer >> Máy Tính >  >> Lập trình >> Java

Làm thế nào chúng ta có thể triển khai JTableHeader bọc từ của một JTable trong Java?

JTableHeader

  • A JTableHeader là một lớp con của JComponent lớp học.
  • Khi chúng tôi tạo JTable đối tượng, hàm tạo sẽ tạo một JTableHeader mới đối tượng để quản lý tiêu đề của thành phần bảng.
  • JTableHeader đối tượng được liên kết với mô hình cột của thành phần bảng để đại biểu giao diện người dùng của nó có thể kéo các cột và hiển thị ô tiêu đề của mỗi cột.
  • JTable cung cấp setTableHeader () phương thức thiết lập JTableHeader của thành phần tiêu đề bảng đối tượng getTableHeader () phương thức trả về một tham chiếu đến JTableHeader của thành phần tiêu đề bảng đối tượng .

Chúng tôi có thể triển khai tiêu đề bảng bọc từ của JTable bằng cách tùy chỉnh DefaultTableModel lớp hoặc AbstractTableModel lớp học.

Ví dụ

import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
public class WordWrappingTableHeaderTest extends JFrame {
   private JTable table;
   public WordWrappingTableHeaderTest() {
      setTitle("WordWrappingTableHeader Test");
      DefaultTableColumnModel tableColumnModel = new DefaultTableColumnModel() {
         public void addColumn(TableColumn column) {
            column.setHeaderRenderer(new JTableHeader().getDefaultRenderer());
            super.addColumn(column);
         }
      };
      table = new JTable();
      table.setFillsViewportHeight(true);
      table.setColumnModel(tableColumnModel);
      table.setModel(new DemoTableModel(Arrays.asList("Word Wrapping TableHeader Test", "Word Wrapping TableHeader Test", "Word Wrapping TableHeader Test"), 20));
      add(new JScrollPane(table));
      setSize(450, 300);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setResizable(false);
      setLocationRelativeTo(null);
      setVisible(true);
   }
   class DemoTableModel extends AbstractTableModel {
      private ArrayList wrappedColumnNames = new ArrayList();
      private int numRows;
      DemoTableModel(List columnNames, int numRows) {
         for (String name: columnNames)
            wrappedColumnNames.add("" + name + "");
            this.numRows = numRows;
      }
      public int getRowCount() {
         return numRows;
      }
      public int getColumnCount() {
         return wrappedColumnNames.size();
      }
      public Object getValueAt(int rowIndex, int columnIndex) {
         return Integer.valueOf(10000 + (rowIndex + 1)*(columnIndex + 1));
      }
      public String getColumnName(int column) {
         return wrappedColumnNames.get(column);
      }
      public Class getColumnClass(int columnIndex) {
         return Integer.class;
      }
   }
   public static void main(String[] args) {
     new WordWrappingTableHeaderTest();
   }
}

Đầu ra

Làm thế nào chúng ta có thể triển khai JTableHeader bọc từ của một JTable trong Java?