/* * The contents of this file are subject to the terms of the Common Development and * Distribution License (the License). You may not use this file except in compliance with the * License. * * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the * specific language governing permission and limitations under the License. * * When distributing Covered Software, include this CDDL Header Notice in each file and include * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL * Header, with the fields enclosed by brackets [] replaced by your own identifying * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2008-2009 Sun Microsystems, Inc. * Portions Copyright 2014-2016 ForgeRock AS. */ package org.opends.guitools.controlpanel.ui.renderer; import java.awt.Component; import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.JTable; import javax.swing.border.Border; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableCellRenderer; import org.opends.guitools.controlpanel.ui.ColorAndFontConstants; import org.opends.guitools.controlpanel.ui.components.LabelWithHelpIcon; import org.opends.guitools.controlpanel.util.Utilities; import org.forgerock.i18n.LocalizableMessage; /** Class used to render the tables. */ public class CustomCellRenderer extends LabelWithHelpIcon implements TableCellRenderer { private static final long serialVersionUID = -8604332267021523835L; /** The border of the first column. */ protected static final Border column0Border = BorderFactory.createCompoundBorder( BorderFactory.createMatteBorder(0, 1, 0, 0, ColorAndFontConstants.gridColor), BorderFactory.createEmptyBorder(4, 4, 4, 4)); /** The default border. */ public static final Border defaultBorder = BorderFactory.createEmptyBorder(4, 4, 4, 4); private static Border defaultFocusBorder; /** Default constructor. */ public CustomCellRenderer() { super(LocalizableMessage.EMPTY, null); setHelpIconVisible(false); setFont(ColorAndFontConstants.tableFont); setOpaque(true); setBackground(ColorAndFontConstants.treeBackground); setForeground(ColorAndFontConstants.treeForeground); } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (value instanceof String) { String s = (String)value; if (s.indexOf("") == 0) { value = ""+ Utilities.applyFont(s.substring(6), ColorAndFontConstants.tableFont); } setText((String)value); } else { setText(String.valueOf(value)); } if (hasFocus) { setBorder(getDefaultFocusBorder(table, value, isSelected, row, column)); } else if (column == 0) { setBorder(column0Border); } else { setBorder(defaultBorder); } return this; } /** * Returns the border to be used for a given cell in a table. * @param table the table. * @param value the value to be rendered. * @param isSelected whether the row is selected or not. * @param row the row number of the cell. * @param column the column number of the cell. * @return the border to be used for a given cell in a table. */ public static Border getDefaultFocusBorder(JTable table, Object value, boolean isSelected, int row, int column) { if (defaultFocusBorder == null) { DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(); JComponent comp = (JComponent) renderer.getTableCellRendererComponent(table, value, isSelected, true, row, column); Border border = comp.getBorder(); if (border != null) { defaultFocusBorder = border; } else { defaultFocusBorder = defaultBorder; } } return defaultFocusBorder; } }