View Javadoc

1   /*
2    * 
3    * 
4    */
5   
6   package oscon2006.swing;
7   
8   import java.io.*;
9   import java.util.*;
10  import java.awt.*;
11  import java.awt.event.*;
12  
13  import javax.swing.*;
14  import javax.swing.table.*;
15  
16  public class JTableDemo
17  {
18  
19  	public static void main(String[] args)
20  	{
21  		
22  		javax.swing.SwingUtilities.invokeLater(new Runnable() 
23  		{
24              public void run() 
25              {
26          		createAndShowGUI();
27              }
28          });
29  		
30  	}
31  
32  	private static void createAndShowGUI()
33  	{
34  		JFrame frame = createFrame();
35  		JTable table = createTable();
36  
37  		frame.setJMenuBar(createMenuBar(table));
38  		
39  		JScrollPane scroll = new JScrollPane(table);
40  		frame.getContentPane().add(scroll);
41  		
42  		frame.setVisible(true);
43  		frame.toFront();
44  	}
45  	
46  	private static JFrame createFrame()
47  	{
48  		JFrame frame = new JFrame();
49  		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
50  		frame.setTitle("JTable demo");
51  		frame.setSize(600, 400);
52  		frame.setLocation(200, 200);
53  		
54  		return frame;
55  	}
56  		
57  	private static JMenuBar createMenuBar(JTable table)
58  	{
59  		JMenuBar menubar = new JMenuBar();
60  
61  		JMenuItem open = new JMenuItem("Open...");
62  		open.setAction(new OpenAction(table));
63  		
64  		JMenuItem saveTable = new JMenuItem("Save table...");
65  		saveTable.setAction(new SaveTableAction(table));
66  		
67  		JMenuItem exit = new JMenuItem("Exit");
68  		exit.setAction(new ExitAction());
69  		
70  		JMenu filemenu = new JMenu("File");
71  		
72  		filemenu.add(open);
73  		filemenu.add(saveTable);
74  		filemenu.add(exit);
75  		
76  		menubar.add(filemenu);
77  		
78  		return menubar;
79  		
80  	}
81  	
82  	private static JTable createTable()
83  	{
84  		final TableModel model = createTableModel();
85  
86  		JTable table = new JTable();
87  		table.setModel(model);
88  		table.createDefaultColumnsFromModel();
89  		table.setShowGrid(true);
90  		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
91  
92  		CustomCellRenderer renderer = new CustomCellRenderer();
93  		
94  		table.setDefaultRenderer(Number.class, renderer);
95  		table.setDefaultRenderer(Object.class, renderer);
96  		table.setDefaultRenderer(Boolean.class, renderer);
97  		table.setDefaultRenderer(String.class, renderer);
98  		
99  		return table;
100 	}
101 
102 	private static TableModel createTableModel()
103 	{
104 		DefaultTableModel model = new DefaultTableModel();
105 		model.addColumn("Pub name"); 
106 		model.addColumn("Phone number");
107 		model.addColumn("Web site");
108 		
109 		model.addRow(new String[] { "Bridgeport Brew Pub", "503-241-3612", "www.bridgeportbrew.com" } );
110 		model.addRow(new String[] { "Widmer Gausthaus", "503-281-3333", "www.widmer.com" } );
111 		model.addRow(new String[] { "Rogue Brewhouse", "503-222-5910", "www.rogue.com" } );
112 		model.addRow(new String[] { "Lucky Lab", "503-517-4352 ", "www.luckylab.com" } );
113 		model.addRow(new String[] { "Mock Crest Tavern", "503-283-5014 ", "www.mockcrest.com" } );
114 		model.addRow(new String[] { "New Old Lompoc", "503-225-1855", "n/a" } );
115 		
116 		return model;
117 	}
118 
119 	private static class CustomCellRenderer extends DefaultTableCellRenderer
120 	{
121 		private static final Font defaultFont = new Font("Arial", Font.PLAIN, 12);
122 		
123 		public Component getTableCellRendererComponent(
124 										JTable table, 
125 										Object value, 
126 										boolean isSelected,
127 										boolean hasFocus, 
128 										int row, 
129 										int column)
130 	    {
131 			
132 			if (value instanceof java.util.Calendar)
133 			{
134 				Calendar c = (Calendar) value;
135 				value = c.getTime().toString();
136 			}
137 			
138 	        Component cell = super.getTableCellRendererComponent(
139 	        										table, value, isSelected, hasFocus, row, column);
140 
141 	        cell.setFont(defaultFont);
142 	        
143 	        if (isSelected)
144 	        {
145 	        	cell.setBackground(Color.yellow);
146 	        }
147 	        else if (row % 2 == 0)
148 	        {
149 	        	cell.setBackground(new Color(230, 230, 230));
150 	        }
151 	        else
152 	        {
153 	        	cell.setBackground(Color.white);
154 	        }
155 	        
156 
157 	        return cell;
158 
159 	    }		
160 	}
161 	
162 	private static class ExitAction extends AbstractAction
163 	{
164 		public ExitAction()
165 		{
166 			super("Exit");
167 		}
168 		
169 		public void actionPerformed(ActionEvent e)
170 		{
171 			System.exit(0);
172 		}
173 	}
174 	
175 }