Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีทำ Word Wrap สำหรับ JTableHeader ใน JTable ด้วย Java

JTableHeader

  • JTableHeader เป็นคลาสย่อยของ JComponent
  • เมื่อสร้างอ็อบเจกต์ JTable คอนสตรัคเตอร์จะสร้าง JTableHeader ใหม่เพื่อจัดการส่วนหัวของตาราง
  • JTableHeader เชื่อมโยงกับ column model ของตาราง เพื่อให้ UI delegate สามารถลากคอลัมน์และแสดงเซลล์หัวคอลัมน์แต่ละคอลัมน์ได้
  • JTable มีเมธอด setTableHeader() สำหรับตั้งค่า JTableHeader และ getTableHeader() สำหรับดึงอ้างอิง JTableHeader

สามารถทำ Word-wrap สำหรับหัวตาราง ของ JTable ได้โดยการปรับแต่งคลาส DefaultTableModel หรือ AbstractTableModel

ตัวอย่างโค้ด

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();
    }
}

ผลลัพธ์

วิธีทำ Word Wrap สำหรับ JTableHeader ใน JTable ด้วย Java