/**
* 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();
}
*/
}
}