All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gate.swing.CheckBoxTableCellRenderer Maven / Gradle / Ivy

Go to download

GATE - general achitecture for text engineering - is open source software capable of solving almost any text processing problem. This artifact enables you to embed the core GATE Embedded with its essential dependencies. You will able to use the GATE Embedded API and load and store GATE XML documents. This artifact is the perfect dependency for CREOLE plugins or for applications that need to customize the GATE dependencies due to confict with their own dependencies or for lower footprint.

The newest version!
/*
 * CheckBoxTableCellRenderer.java
 * 
 * Copyright (c) 2011, The University of Sheffield. See the file COPYRIGHT.txt
 * in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
 * 
 * This file is part of GATE (see http://gate.ac.uk/), and is free software,
 * licenced under the GNU Library General Public License, Version 2, June 1991
 * (in the distribution as file licence.html, and also available at
 * http://gate.ac.uk/gate/licence.html).
 * 
 * Mark A. Greenwood, 27/11/2011
 */

package gate.swing;

import java.awt.Color;
import java.awt.Component;

import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.table.TableCellRenderer;

/**
 * A TableCellRenderer for JCheckBox that disables the checkbox when the cell
 * isn't editable to make it clear that you can't click on it
 * 
 * @author Mark A. Greenwood
 */
@SuppressWarnings("serial")
public class CheckBoxTableCellRenderer extends JCheckBox implements
                                                        TableCellRenderer {

  /**
   * An empty border we use when the cell doesn't have focus
   */
  private static final Border NO_FOCUS = BorderFactory.createEmptyBorder(1, 1,
          1, 1);

  public CheckBoxTableCellRenderer() {
    super();

    // centre the checkbox within the cell
    setHorizontalAlignment(JCheckBox.CENTER);

    // make sure we always paint the cell border
    setBorderPainted(true);

    // make sure we always paint the background
    setOpaque(true);
  }

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

    // this is needed for Nimbus which has alternative rows in different colours
    // hopefully other L&Fs that also do this use the same UIManager key
    Color alternate = UIManager.getColor("Table.alternateRowColor");

    // strangely the background color from Nimbus doesn't render properly unless
    // we convert it in this way. I'm guessing the problem is to do with the
    // DerivedColor class that nimbus uses
    Color normal = new Color(table.getBackground().getRGB());

    if(isSelected) {
      // if the cell is selected then set it's colors from the table
      setForeground(table.getSelectionForeground());
      setBackground(table.getSelectionBackground());
    } else {
      // if the cell isn't selected set it's colors taking into account the
      // possibility of alternating colors that Nimbus throws into the mix
      setForeground(table.getForeground());
      setBackground(alternate != null && row % 2 == 0 ? alternate : normal);
    }

    // if the cell isn't editable then disable the checkbox to give some visual
    // feedback to the user
    setEnabled(table.isCellEditable(row, column));

    // make the checkbox reflect the underlying boolean data
    setSelected(value != null && (Boolean)value);

    if(hasFocus) {
      // if the cell has focus then draw the border set by the L&F
      setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
    } else {
      // if the cell doesn't have the focus then draw the empty border
      setBorder(NO_FOCUS);
    }

    // now return the checkbox for rendering into the table
    return this;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy