001: /*
002: * Copyright 2001-2006 C:1 Financial Services GmbH
003: *
004: * This software is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License Version 2.1, as published by the Free Software Foundation.
007: *
008: * This software is distributed in the hope that it will be useful,
009: * but WITHOUT ANY WARRANTY; without even the implied warranty of
010: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
011: * Lesser General Public License for more details.
012: *
013: * You should have received a copy of the GNU Lesser General Public
014: * License along with this library; if not, write to the Free Software
015: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
016: */
017:
018: package de.finix.contelligent.client.gui.metadata;
019:
020: import java.awt.Color;
021: import java.awt.event.ActionEvent;
022: import java.awt.event.ActionListener;
023:
024: import javax.swing.DefaultCellEditor;
025: import javax.swing.JCheckBox;
026: import javax.swing.JLabel;
027: import javax.swing.JTable;
028: import javax.swing.JTextField;
029: import javax.swing.table.TableCellRenderer;
030:
031: import de.finix.contelligent.client.util.SortableTable;
032: import de.finix.contelligent.client.util.TableModelSorter;
033:
034: public class MetadataTable extends SortableTable {
035:
036: private final static int MIN_ROW_HEIGHT = 22;
037:
038: JTable metadataTable;
039:
040: MetadataTableModel metadataTableModel;
041:
042: public MetadataTable(MetadataTableModel ptm) {
043: super (new TableModelSorter(ptm));
044: metadataTableModel = ptm;
045: metadataTable = this ;
046:
047: setDefaultRenderer(String.class, new MetadataRenderer());
048: setDefaultEditor(String.class, new MetadataCellEditor(this ));
049:
050: setRowHeight(MIN_ROW_HEIGHT);
051: }
052:
053: public void stopEditing() {
054: if (cellEditor != null)
055: cellEditor.stopCellEditing();
056: }
057:
058: class MetadataCellEditor extends DefaultCellEditor {
059: private String content;
060:
061: private java.awt.Component cellEditor;
062:
063: public MetadataCellEditor(MetadataTable vt) {
064: super (new JCheckBox()); // Bad Swing design
065: }
066:
067: public Object getCellEditorValue() {
068: return content;
069: }
070:
071: public java.awt.Component getTableCellEditorComponent(
072: JTable table, Object object, boolean isSelected,
073: final int row, final int column) {
074: content = (String) object;
075:
076: cellEditor = new JTextField(content);
077: ((JTextField) cellEditor)
078: .addActionListener(new ActionListener() {
079: public void actionPerformed(ActionEvent e) {
080: content = ((JTextField) cellEditor)
081: .getText();
082: fireEditingStopped();
083: }
084: });
085: return cellEditor;
086: }
087:
088: public boolean stopCellEditing() {
089: if (cellEditor != null
090: && (cellEditor instanceof JTextField)) {
091: content = ((JTextField) cellEditor).getText();
092: }
093: return super .stopCellEditing();
094: }
095:
096: }
097:
098: class MetadataRenderer implements TableCellRenderer {
099: public java.awt.Component getTableCellRendererComponent(
100: JTable table, Object object, boolean isSelected,
101: boolean hasFocus, int row, int column) {
102: JLabel cellRenderer = new JLabel();
103: cellRenderer.setOpaque(true);
104: String content = (String) object;
105: cellRenderer.setText(content);
106: cellRenderer.setForeground(Color.black);
107: if (isSelected) {
108: cellRenderer.setBackground(metadataTable
109: .getSelectionBackground());
110: cellRenderer.setForeground(metadataTable
111: .getSelectionForeground());
112: } else {
113: cellRenderer.setBackground(metadataTable
114: .getBackground());
115: }
116: cellRenderer.setFont(metadataTable.getFont());
117: return cellRenderer;
118: }
119: }
120:
121: }
|