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 }