Java 如何删除JTable中列标题的边框?

Java 如何删除JTable中列标题的边框?,java,swing,jtable,Java,Swing,Jtable,我的问题是删除JTable中列标题的边框 我的类扩展了JTable,因此我通过以下操作删除了所有其他边界: super.setShowHorizontalLines(假) super.setShowVerticalLines(假) 但这不会删除列标题中的边框。如何执行此操作?您必须从TableHeader中提取JLabel,并在那里设置Border,例如,只有第一个页面的Borders发生了更改列 import java.awt.*; import javax.swing.*; import j

我的问题是删除JTable中列标题的边框

我的类扩展了JTable,因此我通过以下操作删除了所有其他边界:

super.setShowHorizontalLines(假)
super.setShowVerticalLines(假)


但这不会删除列标题中的边框。如何执行此操作?

您必须从
TableHeader
中提取
JLabel
,并在那里设置
Border
,例如,只有第一个页面的
Borders
发生了更改<代码>列

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

public class LabelHeaderSample {

    public static void main(String args[]) {
        Icon redIcon = new DiamondIcon(Color.red);
        Icon blueIcon = new DiamondIcon(Color.blue);
        Object rows[][] = {{"one", "ichi - \u4E00", new DiamondIcon(Color.red)},
            {"two", "ni - \u4E8C", new DiamondIcon(Color.red)},
            {"three", "san - \u4E09", new DiamondIcon(Color.red)},
            {"four", "shi - \u56DB", new DiamondIcon(Color.red)},
            {"five", "go - \u4E94", new DiamondIcon(Color.red)},
            {"six", "roku - \u516D", new DiamondIcon(Color.red)},
            {"seven", "shichi - \u4E03", new DiamondIcon(Color.red)},
            {"eight", "hachi - \u516B", new DiamondIcon(Color.red)},
            {"nine", "kyu - \u4E5D", new DiamondIcon(Color.red)},
            {"ten", "ju - \u5341", new DiamondIcon(Color.red)}};
        JFrame frame = new JFrame("Label Header");
        String headers[] = {"English", "Japanese", "Icon"};
        JTable table = new JTable(rows, headers);
        JScrollPane scrollPane = new JScrollPane(table);
        Border headerBorder = UIManager.getBorder("TableHeader.cellBorder");
        JLabel blueLabel = new JLabel(headers[0], blueIcon, JLabel.CENTER);

        blueLabel.setBorder(null);// < - - - here you set Borders

        JLabel redLabel = new JLabel(headers[1], redIcon, JLabel.CENTER);
        redLabel.setBorder(headerBorder);
        TableCellRenderer renderer = new JComponentTableCellRenderer();
        TableColumnModel columnModel = table.getColumnModel();
        TableColumn column0 = columnModel.getColumn(0);
        TableColumn column1 = columnModel.getColumn(1);
        TableColumn column2 = columnModel.getColumn(2);
        column0.setHeaderRenderer(renderer);
        column0.setHeaderValue(blueLabel);
        column1.setHeaderRenderer(renderer);
        column1.setHeaderValue(redLabel);
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }

    private LabelHeaderSample() {
    }
}

class DiamondIcon implements Icon {

    private Color color;
    private boolean selected;
    private int width;
    private int height;
    private Polygon poly;
    private static final int DEFAULT_WIDTH = 10;
    private static final int DEFAULT_HEIGHT = 10;

    public DiamondIcon(Color color) {
        this(color, true, DEFAULT_WIDTH, DEFAULT_HEIGHT);
    }

    public DiamondIcon(Color color, boolean selected) {
        this(color, selected, DEFAULT_WIDTH, DEFAULT_HEIGHT);
    }

    public DiamondIcon(Color color, boolean selected, int width, int height) {
        this.color = color;
        this.selected = selected;
        this.width = width;
        this.height = height;
        initPolygon();
    }

    private void initPolygon() {
        poly = new Polygon();
        int halfWidth = width / 2;
        int halfHeight = height / 2;
        poly.addPoint(0, halfHeight);
        poly.addPoint(halfWidth, 0);
        poly.addPoint(width, halfHeight);
        poly.addPoint(halfWidth, height);
    }

    public int getIconHeight() {
        return height;
    }

    public int getIconWidth() {
        return width;
    }

    public void paintIcon(Component c, Graphics g, int x, int y) {
        g.setColor(color);
        g.translate(x, y);
        if (selected) {
            g.fillPolygon(poly);
        } else {
            g.drawPolygon(poly);
        }
        g.translate(-x, -y);
    }
}

class JComponentTableCellRenderer implements TableCellRenderer {

    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        return (JComponent) value;
    }
}

import java.awt.*;
导入javax.swing.*;
导入javax.swing.border.border;
导入javax.swing.table.*;
公共类LabelHeaderSample{
公共静态void main(字符串参数[]){
Icon redIcon=新钻石图标(颜色为红色);
图标蓝色图标=新钻石图标(颜色为.blue);
对象行[][]={{“一”,“一-\u4E00”,新钻石图标(颜色.红色)},
{“两个”,“ni-\u4E8C”,新钻石图标(颜色为红色)},
{“三”,“san-\u4E09”,新钻石图标(颜色为红色)},
{“四”,“shi-\u56DB”,新钻石图标(颜色为红色)},
{“五”,“go-\u4E94”,新钻石图标(颜色为红色)},
{“六”,“roku-\u516D”,新钻石图标(颜色为红色)},
{“七”,“石池-\u4E03”,新钻石(颜色为红色)},
{“八”,“八-\u516B”,新钻石(颜色为红色)},
{“nine”,“kyu-\u4E5D”,新钻石图标(颜色为红色)},
{“十”,“ju-\u5341”,新钻石石(红色)};
JFrame=新JFrame(“标签标题”);
字符串头[]={“英语”、“日语”、“图标”};
JTable table=新的JTable(行、标题);
JScrollPane scrollPane=新的JScrollPane(表);
Border headerBorder=UIManager.getBorder(“TableHeader.cellBorder”);
JLabel blueLabel=新的JLabel(标题[0],蓝色图标,JLabel.CENTER);
blueLabel.setboorder(null);//<--在这里设置边框
JLabel redLabel=新的JLabel(标题[1],redIcon,JLabel.CENTER);
红色标签。订单(标题订单);
TableCellRenderer=新的JComponentTableCellRenderer();
TableColumnModel columnModel=table.getColumnModel();
TableColumn column0=columnModel.getColumn(0);
TableColumn column1=columnModel.getColumn(1);
TableColumn column2=columnModel.getColumn(2);
column0.setHeaderRenderer(渲染器);
第0列:setHeaderValue(蓝标);
列1.setHeaderRenderer(渲染器);
第1列:setHeaderValue(红色标签);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(滚动窗格,BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
私人LabelHeaderSample(){
}
}
类DiamondIcon实现Icon{
私人色彩;
选择私有布尔值;
私有整数宽度;
私人内部高度;
私有多边形多边形;
私有静态最终int默认值_宽度=10;
专用静态最终int默认值_高度=10;
公共钻石图标(彩色){
这(颜色、真值、默认宽度、默认高度);
}
公共钻石图标(颜色,选择布尔值){
这(颜色、选定、默认宽度、默认高度);
}
公共菱形图标(颜色、选定布尔值、整数宽度、整数高度){
这个颜色=颜色;
this.selected=selected;
这个。宽度=宽度;
高度=高度;
初始化多边形();
}
私有void initPolygon(){
多边形=新多边形();
int halfWidth=宽度/2;
int halfHeight=高度/2;
多边形添加点(0,半高);
多边形添加点(半宽度,0);
多边形添加点(宽度、半高);
多边形添加点(半宽、高度);
}
public int getIconHeight(){
返回高度;
}
public int getIconWidth(){
返回宽度;
}
公共虚空绘制图标(组件c、图形g、整数x、整数y){
g、 设置颜色(颜色);
g、 翻译(x,y);
如果(选定){
g、 填充多边形(多边形);
}否则{
g、 多边形(多边形);
}
g、 平移(-x,-y);
}
}
类JComponentTableCellRenderer实现TableCellRenderer{
公共组件GetTableCellRenderComponent(JTable表、对象值、,
布尔值(已选择,布尔值为焦点,整数行,整数列){
返回(JComponent)值;
}
}

如果我使用AbstractTableModel来定义标头,而不是使用扩展JTable的类,该怎么办?从DefaultTableModel或AbstractTableModel获取TableHeader之间有什么区别,