import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.StringTokenizer;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
public class TabRenendererList extends JFrame {
protected JList list;
public TabRenendererList() {
super("Swing List with Tab Renenderer");
setSize(500, 240);
String[] items = { "cloumn 1\t column 2\t Column 3",
"cloumn 1\t column 2\t Column 3" };
list = new JList(items);
TabListCellRenderer renderer = new TabListCellRenderer();
list.setCellRenderer(renderer);
JScrollPane scrollPane = new JScrollPane();
scrollPane.getViewport().add(list);
getContentPane().add(scrollPane, BorderLayout.CENTER);
WindowListener exitEvent = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
addWindowListener(exitEvent);
setVisible(true);
}
public static void main(String argv[]) {
new TabRenendererList();
}
}
class TabListCellRenderer extends JLabel implements ListCellRenderer {
protected static Border m_noFocusBorder = new EmptyBorder(1, 1, 1, 1);
protected FontMetrics m_fm = null;
public TabListCellRenderer() {
super();
setOpaque(true);
setBorder(m_noFocusBorder);
}
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
setText(value.toString());
setBackground(isSelected ? list.getSelectionBackground() : list
.getBackground());
setForeground(isSelected ? list.getSelectionForeground() : list
.getForeground());
setFont(list.getFont());
setBorder((cellHasFocus) ? UIManager
.getBorder("List.focusCellHighlightBorder") : m_noFocusBorder);
return this;
}
public void paint(Graphics g) {
m_fm = g.getFontMetrics();
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight());
getBorder().paintBorder(this, g, 0, 0, getWidth(), getHeight());
g.setColor(getForeground());
g.setFont(getFont());
Insets insets = getInsets();
int x = insets.left;
int y = insets.top + m_fm.getAscent();
StringTokenizer st = new StringTokenizer(getText(), "\t");
while (st.hasMoreTokens()) {
String str = st.nextToken();
g.drawString(str, x, y);
//insert distance for each tab
x += m_fm.stringWidth(str) + 50;
if (!st.hasMoreTokens())
break;
}
}
}
|