Mega Code Archive

 
Categories / Java / Swing JFC
 

Tab list renderer

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;     }   } }