Java 如何在列标题上获得凸起的边框?

Java 如何在列标题上获得凸起的边框?,java,swing,Java,Swing,如何在“检查”列中获得凸起的边框,就像在其他列中一样?我发现了一个与此类似的问题,但这里我使用的是InternalJFrame,而main不可用 下面是一个屏幕截图,显示了我的意思: 这是我的代码: class CheckBoxHeader extends JCheckBox implements TableCellRenderer, MouseListener { protected CheckBoxHeader rendererComponent; protected in

如何在“检查”列中获得凸起的边框,就像在其他列中一样?我发现了一个与此类似的问题,但这里我使用的是
InternalJFrame
,而
main
不可用

下面是一个屏幕截图,显示了我的意思:

这是我的代码:

class CheckBoxHeader extends JCheckBox implements TableCellRenderer, MouseListener {
    protected CheckBoxHeader rendererComponent;
    protected int column;
    protected boolean mousePressed = false;

    public CheckBoxHeader(ItemListener itemListener) {
        rendererComponent = this;
        rendererComponent.addItemListener(itemListener);
    }

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

        if (table != null) {
            JTableHeader header = table.getTableHeader();
            if (header != null) {
                rendererComponent.setForeground(Color.BLACK);
                Color lightYellow= new Color(255, 255, 170);
                rendererComponent.setBackground(lightYellow);
                rendererComponent.setFont(new Font("Consolas", Font.BOLD, 14));
                setOpaque(true);
                rendererComponent.setBorder(BorderFactory.createRaisedBevelBorder());
                setHorizontalAlignment( JLabel.CENTER );
                header.addMouseListener(rendererComponent);
            }
        }
        setColumn(column);
        rendererComponent.setText(value.toString());
        //setBorder(UIManager.getBorder("TableHeader.cellBorder"));
        return rendererComponent;
    }

    protected void setColumn(int column) {
        this.column = column;
    }

    public int getColumn() {
        return column;
    }

    protected void handleClickEvent(MouseEvent e) {
        if (mousePressed) {
            mousePressed=false;
            JTableHeader header = (JTableHeader)(e.getSource());
            JTable tableView = header.getTable();
            TableColumnModel columnModel = tableView.getColumnModel();
            int viewColumn = columnModel.getColumnIndexAtX(e.getX());
            int column = tableView.convertColumnIndexToModel(viewColumn);

            if (viewColumn == this.column && e.getClickCount() == 1 && column !=  -1)    {
                doClick();
            }
        }
    }
    public void mouseClicked(MouseEvent e) {
        handleClickEvent(e);
        ((JTableHeader)e.getSource()).repaint();
    }
    public void mousePressed(MouseEvent e) {
        mousePressed = true;
    }
    public void mouseReleased(MouseEvent e) {
    }
    public void mouseEntered(MouseEvent e) {
    }
    public void mouseExited(MouseEvent e) {
    }
}

class MyItemListener implements ItemListener
{
    public void itemStateChanged(ItemEvent e) {
        Object source = e.getSource();
        if (source instanceof AbstractButton == false) return;
        boolean checked = e.getStateChange() == ItemEvent.SELECTED;
        for(int x = 0, y = DailydatasTbl.getRowCount(); x < y; x++)
        {
            // DailydatasTbl.setValueAt(new Boolean(checked),x,0);
        }
    }
}
类CheckBoxHeader扩展JCheckBox实现TableCellRenderer、MouseStener{
受保护的CheckBoxHeader渲染器组件;
受保护的int列;
受保护的布尔值mousePressed=false;
公共CheckBoxHeader(ItemListener ItemListener){
RenderComponent=此;
RenderComponent.addItemListener(itemListener);
}
公共组件GetTableCellRenderComponent(JTable表、对象值、布尔isSelected、布尔hasFocus、int行、int列){
如果(表!=null){
JTableHeader=table.getTableHeader();
if(标题!=null){
RenderComponent.setForeground(颜色:黑色);
颜色浅黄色=新颜色(255、255、170);
渲染器组件。背景(浅黄色);
renderComponent.setFont(新字体(“Consolas”,Font.BOLD,14));
set不透明(true);
RenderComponent.setBorder(BorderFactory.CreateRaisedBevelOrder());
设置水平对齐(JLabel.CENTER);
header.addMouseListener(渲染器组件);
}
}
设置列(列);
renderComponent.setText(value.toString());
//setboorder(UIManager.getBorder(“TableHeader.cellBorder”);
返回渲染器组件;
}
受保护的void setColumn(int列){
this.column=列;
}
public int getColumn(){
返回列;
}
受保护的无效handleClickEvent(MouseeEvent e){
如果(鼠标按下){
鼠标按下=错误;
JTableHeader=(JTableHeader)(e.getSource());
JTable tableView=header.getTable();
TableColumnModel columnModel=tableView.getColumnModel();
int viewColumn=columnModel.getColumnIndexAtX(e.getX());
int column=tableView.convertColumnIndexToModel(viewColumn);
如果(viewColumn==this.column&&e.getClickCount()==1&&column!=-1){
doClick();
}
}
}
公共无效mouseClicked(MouseEvent e){
handleClickEvent(e);
((JTableHeader)e.getSource()).repaint();
}
公共无效鼠标按下(MouseEvent e){
鼠标按下=真;
}
公共无效MouseEvent(MouseEvent e){
}
公共无效鼠标事件(鼠标事件e){
}
公共无效mouseExited(MouseEvent e){
}
}
类MyItemListener实现ItemListener
{
公共无效itemStateChanged(ItemEvent e){
对象源=e.getSource();
if(sourceinstanceof AbstractButton==false)返回;
选中布尔值=e.getStateChange()==ItemEvent.SELECTED;
对于(int x=0,y=DailydatasTbl.getRowCount();x
更改代码头.setBORDORDER(BorderFactory.createRaisedBevelBorder())后;底部有边框,但右边的边框还是空的。我编辑了这个问题,这样英语就更好了,里面只有一个问题。我还添加了一个相关标签,并将标题更改为更准确。