/** * Copyright 1999-2009 The Pegadi Team * * 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.pegadi.storysketch.views; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import javax.swing.BorderFactory; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.JViewport; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableModel; public class RDFTable extends JTable { public RDFTable(TableModel model, boolean simple) { super(model); if(!simple) { this.setDefaultRenderer(RDFItem.class, new RDFItemCellRenderer()); setRowHeight(90); } } public Dimension getPreferredScrollableViewportSize() { return new Dimension(200,200); } public boolean getScrollableTracksViewportHeight() { Component parent = getParent(); return parent instanceof JViewport && parent.getHeight() > getPreferredSize().height; } class RDFItemCellRenderer extends JPanel implements TableCellRenderer { JLabel titleLabel = new JLabel(); JTextArea descriptionArea = new JTextArea(); JLabel dateLabel = new JLabel(); public RDFItemCellRenderer() { titleLabel = new JLabel(); titleLabel.setBorder(BorderFactory.createEmptyBorder(3,0,5,0)); descriptionArea = new JTextArea(); descriptionArea.setBorder(BorderFactory.createEmptyBorder(3,0,5,0)); descriptionArea.setOpaque(false); descriptionArea.setLineWrap(true); descriptionArea.setWrapStyleWord(true); dateLabel = new JLabel(); dateLabel.setBorder(BorderFactory.createEmptyBorder(3,0,5,0)); setLayout(new BorderLayout()); add(titleLabel, BorderLayout.NORTH); //box.add(titleLabel); //box.add(box.createVerticalStrut(10)); add(descriptionArea, BorderLayout.CENTER); //box.add(descriptionLabel); //box.add(box.createVerticalStrut(3)); add(dateLabel, BorderLayout.SOUTH); //box.add(dateLabel); //box.add(box.createVerticalStrut(10)); //add(box); titleLabel.setFont(titleLabel.getFont().deriveFont((float)12).deriveFont(Font.BOLD)); descriptionArea.setFont(descriptionArea.getFont().deriveFont((float)11)); dateLabel.setFont(dateLabel.getFont().deriveFont((float)10)); } // This is the only method defined by ListCellRenderer. // We just reconfigure the JLabel each time we're called. public Component getTableCellRendererComponent(JTable list, Object value, // value to display boolean isSelected, // is the cell selected boolean cellHasFocus, // the list and the cell have the focus int row, // cell row int column) // cell column { if(value instanceof RDFItem) { RDFItem item = (RDFItem) value; titleLabel.setText("<html>" +item.getTitle() +"</html>"); descriptionArea.setText(item.getDescription()); dateLabel.setText(item.getDate()); if (isSelected) { setBackground(list.getSelectionBackground()); setForeground(list.getSelectionForeground()); } else { setBackground(list.getBackground()); setForeground(list.getForeground()); } setEnabled(list.isEnabled()); setFont(list.getFont()); setOpaque(true); } return this; } /* public Dimension getPreferredSize() { return box.getPreferredSize(); } */ } }