首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JTable 配合 JScrollPane 設定右上角 Corner 顏色完整指南

     編輯:Java 相關知識

問題現象

當 JTable 設定表頭並放入 JScrollPane 時,右上角角落區域預設為灰色,與表頭顏色不一致,影響視覺整體性。

解決方案

  1. 建立一個 JLabel 作為 Corner Component。
  2. 設定背景色並啟用 setOpaque(true)(關鍵步驟,否則背景不繪製)。
  3. 透過 JScrollPane.setCorner(JScrollPane.UPPER_RIGHT_CORNER, label) 安裝。

核心代碼

JLabel cornerLabel = new JLabel();
cornerLabel.setBackground(Color.BLACK); // 目標顏色
cornerLabel.setOpaque(true);            // 必須開啟,否則透明
jScrollPane.setCorner(JScrollPane.UPPER_RIGHT_CORNER, cornerLabel);

完整可執行範例

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

public class KJTable extends JFrame {
    public KJTable() {
        setLayout(new BorderLayout());
        Object[][] rows = {
            {"王明", "中國", 44}, {"姚明", "中國", 25}, {"趙子龍", "西蜀", 1234},
            {"曹操", "北魏", 2112}, {"Bill Gates", "美國", 45}, {"Mike", "英國", 33}
        };
        String[] cols = {"姓名", "國籍", "年齡"};
        JTable table = new JTable(new DefaultTableModel(rows, cols));
        table.setRowHeight(20);

        // 自定義表頭與列渲染器
        KJTableCellRenderer renderer = new KJTableCellRenderer();
        table.getTableHeader().setDefaultRenderer(renderer);
        table.setDefaultRenderer(Object.class, renderer);

        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane, BorderLayout.CENTER);

        // 設定右上角顏色
        JLabel corner = new JLabel();
        corner.setBackground(Color.BLACK);
        corner.setOpaque(true);
        scrollPane.setCorner(JScrollPane.UPPER_RIGHT_CORNER, corner);

        setSize(300, 200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    static class KJTableCellRenderer extends JLabel implements TableCellRenderer {
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int col) {
            if (row < 0) { // 表頭
                setHorizontalAlignment(SwingConstants.CENTER);
                setBackground(new Color(45, 145, 180));
                setForeground(Color.WHITE);
            } else {
                setHorizontalAlignment(SwingConstants.LEFT);
                if (row % 2 == 0) {
                    setBackground(new Color(255, 255, 205));
                    setForeground(Color.BLUE);
                } else {
                    setBackground(new Color(255, 220, 150));
                    setForeground(Color.RED);
                }
            }
            setText(value.toString());
            setOpaque(true);
            return this;
        }
    }

    public static void main(String[] args) { new KJTable(); }
}

關鍵點總結

  • JScrollPane.getCorner(...) 預設回傳 null,必須先 setCorner 放入元件。
  • JComponent.setOpaque(true) 讓元件繪製背景,預設為 false。
  • 同理可設定 UPPER_LEFT_CORNER、LOWER_LEFT_CORNER、LOWER_RIGHT_CORNER。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved