/** * $RCSfile: ,v $ * $Revision: $ * $Date: $ * * Copyright (C) 2004-2011 Jive Software. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jivesoftware.spark.component; import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.border.Border; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellRenderer; import java.awt.Color; import java.awt.Component; import java.util.List; /** * <code>JiveTable</code> class can be used to maintain quality look and feel * throughout the product. This is mainly from the rendering capabilities. * * @version 1.0, 03/12/14 */ public class JiveTable extends JTable { private static final long serialVersionUID = -7140811933957438525L; private JiveTable.JiveTableModel tableModel; public JiveTable(String[] headers, Integer[] columnsToUseRenderer) { tableModel = new JiveTable.JiveTableModel(headers, 0, false); this.setModel(tableModel); getTableHeader().setReorderingAllowed(false); setGridColor(java.awt.Color.white); setRowHeight(20); getColumnModel().setColumnMargin(0); setSelectionBackground(new java.awt.Color(57, 109, 206)); setSelectionForeground(java.awt.Color.white); setSelectionMode(ListSelectionModel.SINGLE_SELECTION); setRowSelectionAllowed(false); } public TableCellRenderer getCellRenderer(int row, int column) { if (column == 3 || column == 4) { return new JiveTable.JButtonRenderer(false); } else if (column == 1) { return new JiveTable.JLabelRenderer(false); } else { return super.getCellRenderer(row, column); } } public void add(List<Object> list) { for (Object aList : list) { Object[] newRow = (Object[]) aList; tableModel.addRow(newRow); } } public Object[] getSelectedObject() { int selectedRow = getSelectedRow(); if (selectedRow < 0) { return null; } int columnCount = getColumnCount(); Object[] obj = new Object[columnCount]; for (int j = 0; j < columnCount; j++) { Object objs = tableModel.getValueAt(selectedRow, j); obj[j] = objs; } return obj; } public class JiveTableModel extends DefaultTableModel { private static final long serialVersionUID = -2072664365332767844L; private boolean _isEditable; /** * Use the JiveTableModel in order to better handle the table. This allows * for consistency throughout the product. * * @param columnNames - String array of columnNames * @param numRows - initial number of rows * @param isEditable - true if the cells are editable, false otherwise. */ public JiveTableModel(Object[] columnNames, int numRows, boolean isEditable) { super(columnNames, numRows); _isEditable = isEditable; } /** * Returns true if cell is editable. */ public boolean isCellEditable(int row, int column) { return _isEditable; } } class JLabelRenderer extends JLabel implements TableCellRenderer { private static final long serialVersionUID = 4387574944818048720L; Border unselectedBorder = null; Border selectedBorder = null; boolean isBordered = true; public JLabelRenderer(boolean isBordered) { super(); } public Component getTableCellRendererComponent(JTable table, Object color, boolean isSelected, boolean hasFocus, int row, int column) { final String text = ((JLabel)color).getText(); setText(text); final Icon icon = ((JLabel)color).getIcon(); setIcon(icon); if (isSelected) { setForeground(table.getSelectionForeground()); setBackground(table.getSelectionBackground()); } else { setForeground(Color.black); setBackground(Color.white); if (row % 2 == 0) { //setBackground( new Color( 156, 207, 255 ) ); } } if (isBordered) { if (isSelected) { if (selectedBorder == null) { selectedBorder = BorderFactory.createMatteBorder(2, 5, 2, 5, table.getSelectionBackground()); } setBorder(selectedBorder); } else { if (unselectedBorder == null) { unselectedBorder = BorderFactory.createMatteBorder(2, 5, 2, 5, table.getBackground()); } setBorder(unselectedBorder); } } return this; } } class JButtonRenderer extends JButton implements TableCellRenderer { private static final long serialVersionUID = -5287214156125954342L; Border unselectedBorder = null; Border selectedBorder = null; boolean isBordered = true; public JButtonRenderer(boolean isBordered) { super(); //this.isBordered = isBordered; //setOpaque(true); //MUST do this for background to show up. } public Component getTableCellRendererComponent(JTable table, Object color, boolean isSelected, boolean hasFocus, int row, int column) { final String text = ((JButton)color).getText(); setText(text); final Icon icon = ((JButton)color).getIcon(); setIcon(icon); if (isSelected) { setForeground(table.getSelectionForeground()); setBackground(table.getSelectionBackground()); } else { setForeground(Color.black); setBackground(Color.white); if (row % 2 == 0) { //setBackground( new Color( 156, 207, 255 ) ); } } if (isBordered) { if (isSelected) { if (selectedBorder == null) { selectedBorder = BorderFactory.createMatteBorder(2, 5, 2, 5, table.getSelectionBackground()); } setBorder(selectedBorder); } else { if (unselectedBorder == null) { unselectedBorder = BorderFactory.createMatteBorder(2, 5, 2, 5, table.getBackground()); } setBorder(unselectedBorder); } } return this; } } public JiveTable.JiveTableModel getTableModel() { return tableModel; } }