?? s19.htm
字號:
return resources.getString(key);<br> }<br> return null;<br> }<br> }</p> <hr size="1" noshade> <p align="center"> </p> <p> 19.4.4 鎖定左邊列</p> <p> </p> <p align="center"><b>例19-9 鎖定表格的左列</b></p> <hr noshade size="1"> import java.awt.*;<br> import java.awt.event.*;<br> import javax.swing.*;<br> import javax.swing.event.*;<br> import javax.swing.table.*; <p>public class Test extends JFrame {<br> Object[][] listings = new Object[][] {<br> { "28 Pickelodan", "Mork and Mindy", "Dukes of Hazard", <br> "I Love Lucy", "Andy Griffith", "Mission Impossible" },</p> <p> { "29 Dizey", "Rulan", "<-- Mulan", "<-- Mulan", <br> "<-- Mulan", "<-- Mulan" },</p> <p> { "31 NBT", "Nightly News", "40/20", <br> "<-- 40/20", "LimeTime", "<-- LimeTime" },</p> <p> { "32 AnimalUniverse", "Amazing Animals","Animal Rescues",<br> "Cute Animals", "Killer Animals", <br> "Big and Small Animals" },</p> <p> { "34 DSPN", "Tuesday Night FootBall", <br> "<--Tuesday Night FootBall", "<--Tuesday Night FootBall", <br> "<--Tuesday Night FootBall", "<--Tuesday Night FootBall"},</p> <p> { "37 TLC", "Mind Mysteries", "Our World", <br> "Ancient Wonders", "UFOs", "Ancient Inventions" },</p> <p> { "38 THC", "The Civil War", "Stalin", <br> "Watergate", "Kent State", "WWII" },<br> };<br> Object[] columnNames = new Object[] {<br> "Channel", "7:30", "8:00", "8:30", "9:00", "9:30"<br> };<br> TableModel sharedModel = new DefaultTableModel(<br> listings, columnNames);<br> JTable table = new JTable(sharedModel),<br> headerTable = new JTable(sharedModel);</p> <p> TableColumnModel tcm = table.getColumnModel();<br> TableColumn firstColumn = tcm.getColumn(0);</p> <p> public Test() {<br> Container cp = getContentPane();</p> <p> setActualPreferredColumnWidths(table);<br> setActualPreferredColumnWidths(headerTable);</p> <p> table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);<br> headerTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);</p> <p> headerTable.getTableHeader().setReorderingAllowed(false);</p> <p> headerTable.setPreferredScrollableViewportSize(<br> new Dimension(<br> firstColumn.getPreferredWidth() +<br> headerTable.getColumnModel().getColumnMargin(), <br> 0));</p> <p> cp.add(new ControlPanel(), BorderLayout.NORTH);<br> cp.add(new JScrollPane(table), BorderLayout.CENTER);<br> }<br> class ControlPanel extends JPanel {<br> JCheckBox checkBox = new JCheckBox("First Column Locked");</p> <p> public ControlPanel() {<br> add(checkBox);</p> <p> checkBox.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> JScrollPane scrollPane = (JScrollPane)<br> SwingUtilities.getAncestorOfClass(<br> JScrollPane.class, table);</p> <p> if(checkBox.isSelected()) {<br> tcm.removeColumn(firstColumn);<br> scrollPane.setRowHeaderView(headerTable);<br> scrollPane.setCorner(<br> JScrollPane.UPPER_LEFT_CORNER,<br> headerTable.getTableHeader());<br> }<br> else {<br> tcm.addColumn(firstColumn);</p> <p> int numCols = tcm.getColumnCount();<br> tcm.moveColumn(numCols-1, 0);<br> scrollPane.setRowHeaderView(null);<br> }<br> }<br> });<br> }<br> }<br> public void setActualPreferredColumnWidths(JTable table) {<br> int columnCount = table.getColumnCount();</p> <p> for(int i=0; i < columnCount; ++i) {<br> TableColumn c = table.getColumnModel().getColumn(i);<br> int w = getActualPreferredColumnWidth(c);</p> <p> c.setPreferredWidth(w);<br> }<br> }<br> public int getActualPreferredColumnWidth(TableColumn col) {<br> int hw = columnHeaderWidth(col), // hw = header width<br> cw = widestCellInColumn(col); // cw = column width</p> <p> return hw > cw ? hw : cw;<br> }<br> private int columnHeaderWidth(TableColumn col) {<br> TableCellRenderer renderer = col.getHeaderRenderer();</p> <p> Component comp = renderer.getTableCellRendererComponent(<br> table, col.getHeaderValue(), <br> false, false, 0, 0);</p> <p> return comp.getPreferredSize().width;<br> }<br> private int widestCellInColumn(TableColumn col) {<br> int c = col.getModelIndex(), width=0, maxw=0;</p> <p> for(int r=0; r < table.getRowCount(); ++r) {<br> TableCellRenderer renderer = <br> table.getCellRenderer(r,c);</p> <p> Component comp = <br> renderer.getTableCellRendererComponent(<br> table, table.getValueAt(r,c), <br> false, false, r, c);</p> <p> width = comp.getPreferredSize().width;<br> maxw = width > maxw ? width : maxw;<br> }<br> return maxw;<br> }<br> public static void main(String args[]) {<br> GraphicJavaApplication.launch(<br> new Test(),"Locking the Left-Hand Column",<br> 300,300,600,210);<br> }<br> }<br> class GraphicJavaApplication extends WindowAdapter {<br> public static void launch(final JFrame f, String title,<br> final int x, final int y, <br> final int w, int h) {<br> f.setTitle(title);<br> f.setBounds(x,y,w,h);<br> f.setVisible(true);</p> <p> f.setDefaultCloseOperation(<br> WindowConstants.DISPOSE_ON_CLOSE);</p> <p> f.addWindowListener(new WindowAdapter() {<br> public void windowClosed(WindowEvent e) {<br> System.exit(0);<br> }<br> });<br> }<br> }</p> <hr size="1" noshade> <p> 19.5 表格選取</p> <p> </p> <p align="center"><b>例19-10 表格選取</b></p> <hr noshade size="1"> import javax.swing.*;<br> import javax.swing.event.*;<br> import javax.swing.table.*;<br> import java.awt.*;<br> import java.awt.event.*; <p>public class Test extends JFrame {<br> Object[] selectionModes = new Object[] {<br> "SINGLE_SELECTION",<br> "SINGLE_INTERVAL_SELECTION",<br> "MULTIPLE_INTERVAL_SELECTION",<br> };<br> int[] selectionConstants = {<br> ListSelectionModel.SINGLE_SELECTION,<br> ListSelectionModel.SINGLE_INTERVAL_SELECTION,<br> ListSelectionModel.MULTIPLE_INTERVAL_SELECTION,<br> };</p> <p> JTable table = new JTable(10,10);</p> <p> public Test() {<br> Container contentPane = getContentPane();<br> contentPane.add(new ControlPanel(), BorderLayout.NORTH);<br> contentPane.add(new JScrollPane(table), <br> BorderLayout.CENTER);</p> <p> }<br> class ControlPanel extends JPanel {<br> JComboBox combo = new JComboBox(selectionModes);</p> <p> public ControlPanel() {<br> setBorder(BorderFactory.createTitledBorder(<br> "Selection Modes"));<br> add(combo);<br> initializeCombo();</p> <p> combo.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> int index = combo.getSelectedIndex();</p> <p> table.setSelectionMode(<br> selectionConstants[index]);<br> }<br> });<br> } <br> private void initializeCombo() {<br> int mode = <br> table.getSelectionModel().getSelectionMode();</p> <p> if(mode == ListSelectionModel.SINGLE_SELECTION) { <br> combo.setSelectedIndex(0);<br> }<br> else if(mode == <br> ListSelectionModel.SINGLE_INTERVAL_SELECTION) {<br> combo.setSelectedIndex(1);<br> }<br> else if(mode == <br> ListSelectionModel.MULTIPLE_INTERVAL_SELECTION) {<br> combo.setSelectedIndex(2);<br> }<br> }<br> }<br> public static void main(String args[]) {<br> GraphicJavaApplication.launch(<br> new Test(),"JTable Selection Modes",300,300,450,300);<br> }<br> }<br> class GraphicJavaApplication extends WindowAdapter {<br> public static void launch(final JFrame f, String title,<br> final int x, final int y, <br> final int w, int h) {<br> f.setTitle(title);<br> f.setBounds(x,y,w,h);<br> f.setVisible(true);</p> <p> f.setDefaultCloseOperation(<br> WindowConstants.DISPOSE_ON_CLOSE);</p> <p> f.addWindowListener(new WindowAdapter() {<br> public void windowClosed(WindowEvent e) {<br> System.exit(0);<br> }<br> });<br> }<br> }</p> <hr size="1" noshade> <p align="center"> </p> <p> 19.6 繪制和編輯</p> <p> </p> <p align="center"> </p> <p> 19.6.1 使用表格單繪制器和編輯器</p> <p> </p> <p align="center"><b>例19-11 StereoDeckModel類</b></p> <hr noshade size="1"> import javax.swing.*;<br> import javax.swing.table.*; <p>class StereoDeckModel extends AbstractTableModel {<br> String[] columnNames = {<br> "In Use", "Manufacturer", "Model", "Price", "Dolby",<br> "Bass", "Volume"<br> };<br> Object[][] data = {<br> { Boolean.FALSE, "Sony", "1501A", <br> new Double(129.99), Boolean.TRUE,<br> Boolean.TRUE, new Integer(50) }, </p> <p> { Boolean.FALSE, "Phillips", "86A4", <br> new Double(159.99), Boolean.TRUE,<br> Boolean.FALSE, new Integer(35) }, </p> <p> { Boolean.TRUE, "Kenwood", "33-801-A", <br> new Double(199.99), Boolean.FALSE,<br> Boolean.TRUE, new Integer(77) }, </p> <p> { Boolean.FALSE, "Blaupunkt", "7622A", <br> new Double(229.99), Boolean.TRUE,<br> Boolean.FALSE, new Integer(19) }, </p> <p> { Boolean.FALSE, "Akai", "9733", <br> new Double(259.99), Boolean.TRUE,<br> Boolean.FALSE, new Integer(68) }, </p> <p> { Boolean.FALSE, "Sony", "1520B", <br> new Double(349.99), Boolean.FALSE,<br> Boolean.FALSE, new Integer(94) }, </p> <p> { Boolean.FALSE, "Kenwood", "2289B", <br> new Double(499.99), Boolean.FALSE,<br> Boolean.FALSE, new Integer(44) }, <br> };<br> public Object getValueAt(int row, int col) {<br> return data[row][col];<br> }<br> public int getRowCount() { <br> return data.length; <br> }<br>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -