?? s19.htm
字號:
new Boolean(false), new Double(99.99),<br> new ImageIcon("sasami.jpg")},</p> <p> { "Thomas", dayOne, dayTwo, <br> new Boolean(false), new Boolean(true), <br> new Boolean(true), new Double(79.99),<br> new ImageIcon("aeka.jpg")},<br> <br> { "Reed", dayOne, dayTwo, <br> new Boolean(true), new Boolean(true), <br> new Boolean(true), new Double(79.99),<br> new ImageIcon("tenchi.jpg")},</p> <p> { "Crenshaw", dayOne, dayTwo, <br> new Boolean(false), new Boolean(false), <br> new Boolean(false), new Double(69.99),<br> new ImageIcon("washu.jpg")},</p> <p> { "Royal", dayOne, dayTwo, <br> new Boolean(true), new Boolean(false), <br> new Boolean(false), new Double(99.99),<br> new ImageIcon("sasami.jpg")},</p> <p> { "Moore", dayOne, dayTwo, <br> new Boolean(false), new Boolean(true), <br> new Boolean(true), new Double(79.99),<br> new ImageIcon("aeka.jpg")},<br> };<br> <br> JTable table = new JTable(new CustomModel(data, columnNames));<br> public Test() {<br> getContentPane().add(new JScrollPane(table),<br> BorderLayout.CENTER);<br> }<br> public static void main(String args[]) {<br> GJApp.launch(<br> new Test(), <br> "A Custom Table Model That Specifies Column Classes",<br> 300,300,650,182);<br> }<br> }<br> class CustomModel extends DefaultTableModel {<br> public CustomModel(Object[][] data, Object[] columnNames) {<br> super(data, columnNames);<br> }<br> public Class getColumnClass(int col) {<br> // dataVector is a protected member of DefaultTableModel<br> <br> Vector v = (Vector)dataVector.elementAt(0);<br> return v.elementAt(col).getClass();<br> }<br> public boolean isCellEditable(int row, int col) {<br> Class columnClass = getColumnClass(col);<br> return columnClass != ImageIcon.class && <br> columnClass != Date.class;<br> }<br> }<br> class GJApp extends WindowAdapter {<br> static private JPanel statusArea = new JPanel();<br> static private JLabel status = new JLabel(" ");<br> static private ResourceBundle resources;</p> <p> public static void launch(final JFrame f, String title,<br> final int x, final int y, <br> final int w, int h) {<br> launch(f,title,x,y,w,h,null); <br> }<br> public static void launch(final JFrame f, String title,<br> final int x, final int y, <br> final int w, int h,<br> String propertiesFilename) {<br> f.setTitle(title);<br> f.setBounds(x,y,w,h);<br> f.setVisible(true);</p> <p> statusArea.setBorder(BorderFactory.createEtchedBorder());<br> statusArea.setLayout(new FlowLayout(FlowLayout.LEFT,0,0));<br> statusArea.add(status);<br> status.setHorizontalAlignment(JLabel.LEFT);</p> <p> f.setDefaultCloseOperation(<br> WindowConstants.DISPOSE_ON_CLOSE);</p> <p> if(propertiesFilename != null) {<br> resources = ResourceBundle.getBundle(<br> propertiesFilename, Locale.getDefault());<br> }</p> <p> f.addWindowListener(new WindowAdapter() {<br> public void windowClosed(WindowEvent e) {<br> System.exit(0);<br> }<br> });<br> }<br> static public JPanel getStatusArea() {<br> return statusArea;<br> }<br> static public void showStatus(String s) {<br> status.setText(s);<br> }<br> static Object getResource(String key) {<br> if(resources != null) {<br> return resources.getString(key);<br> }<br> return null;<br> }<br> }</p> <hr size="1" noshade> <p> 19.3 表格列</p> <p> </p> <p align="center"> </p> <p> 19.3.1 列調整大小模式</p> <p> </p> <p align="center"><b>例19-5 JTable調整大小模式</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.*;<br> import java.util.*; <p>public class Test extends JFrame {<br> Object[] resizeModes = new Object[] {<br> "JTable.AUTO_RESIZE_OFF",<br> "JTable.AUTO_RESIZE_NEXT_COLUMN",<br> "JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS",<br> "JTable.AUTO_RESIZE_LAST_COLUMN",<br> "JTable.AUTO_RESIZE_ALL_COLUMNS",<br> };<br> int[] resizeConstants = {<br> JTable.AUTO_RESIZE_OFF,<br> JTable.AUTO_RESIZE_NEXT_COLUMN,<br> JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS,<br> JTable.AUTO_RESIZE_LAST_COLUMN,<br> JTable.AUTO_RESIZE_ALL_COLUMNS,<br> };<br> JTable table = new JTable(6,5);</p> <p> public Test() {<br> Container contentPane = getContentPane();</p> <p> contentPane.add(new ControlPanel(), BorderLayout.NORTH);<br> contentPane.add(new JScrollPane(table), <br> BorderLayout.CENTER);</p> <p> }<br> class ControlPanel extends JPanel {<br> JComboBox resizeModeCombo = new JComboBox(resizeModes);</p> <p> public ControlPanel() {<br> initializeCombo();</p> <p> setBorder(BorderFactory.createTitledBorder(<br> "Resize Mode"));</p> <p> setLayout(new FlowLayout(FlowLayout.LEFT,2,2));<br> add(resizeModeCombo);</p> <p> resizeModeCombo.addActionListener(<br> new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> int index = <br> resizeModeCombo.getSelectedIndex();</p> <p> table.setAutoResizeMode(<br> resizeConstants[index]);<br> }<br> });<br> }<br> private void initializeCombo() {<br> int resizeMode = table.getAutoResizeMode();</p> <p> if(resizeMode == JTable.AUTO_RESIZE_OFF)<br> resizeModeCombo.setSelectedIndex(0);<br> else if(resizeMode == JTable.AUTO_RESIZE_NEXT_COLUMN)<br> resizeModeCombo.setSelectedIndex(1);<br> else if(resizeMode == JTable.AUTO_RESIZE_LAST_COLUMN)<br> resizeModeCombo.setSelectedIndex(2);<br> else if(resizeMode == JTable.AUTO_RESIZE_ALL_COLUMNS)<br> resizeModeCombo.setSelectedIndex(3);<br> else if(<br> resizeMode == JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS)<br> resizeModeCombo.setSelectedIndex(4);<br> }<br> }<br> public static void main(String args[]) {<br> GJApp.launch(<br> new Test(), "JTable Resize Modes", 300,300,425,210);<br> }<br> }<br> class GJApp extends WindowAdapter {<br> static private JPanel statusArea = new JPanel();<br> static private JLabel status = new JLabel(" ");<br> static private ResourceBundle resources;</p> <p> public static void launch(final JFrame f, String title,<br> final int x, final int y, <br> final int w, int h) {<br> launch(f,title,x,y,w,h,null); <br> }<br> public static void launch(final JFrame f, String title,<br> final int x, final int y, <br> final int w, int h,<br> String propertiesFilename) {<br> f.setTitle(title);<br> f.setBounds(x,y,w,h);<br> f.setVisible(true);</p> <p> statusArea.setBorder(BorderFactory.createEtchedBorder());<br> statusArea.setLayout(new FlowLayout(FlowLayout.LEFT,0,0));<br> statusArea.add(status);<br> status.setHorizontalAlignment(JLabel.LEFT);</p> <p> f.setDefaultCloseOperation(<br> WindowConstants.DISPOSE_ON_CLOSE);</p> <p> if(propertiesFilename != null) {<br> resources = ResourceBundle.getBundle(<br> propertiesFilename, Locale.getDefault());<br> }</p> <p> f.addWindowListener(new WindowAdapter() {<br> public void windowClosed(WindowEvent e) {<br> System.exit(0);<br> }<br> });<br> }<br> static public JPanel getStatusArea() {<br> return statusArea;<br> }<br> static public void showStatus(String s) {<br> status.setText(s);<br> }<br> static Object getResource(String key) {<br> if(resources != null) {<br> return resources.getString(key);<br> }<br> return null;<br> }<br> }</p> <hr size="1" noshade> <p align="center"> </p> <p> 19.3.2 列寬度</p> <p> </p> <p align="center"><b>例19-6 指定列寬度</b></p> <hr noshade size="1"> import java.awt.*;<br> import java.awt.event.*;<br> import javax.swing.*;<br> import javax.swing.table.*;<br> import java.util.*; <p>public class Test extends JFrame {<br> Object[] columnNames = <br> {"First Name", "MI", "Last Name"};</p> <p> Object[][] names = {<br> { "Lynn", "M.", "Seckinger" },<br> { "Carol", "R.", "Seckinger" },<br> { "Roy", "D.", "Martin" },<br> { "Bill", "O.", "Veryveryveryverylonglastname" },<br> { "Richard", "A.", "Tattersall" },<br> { "Philip", "B.", "Edwards" },<br> { "Moore", "T.", "Moore" },</p> <p> // shorten scrollbar grip with these ...<br> { "Lynn", "M.", "Seckinger" },<br> { "Carol", "R.", "Seckinger" },<br> { "Roy", "D.", "Martin" },<br> { "Bill", "O.", "Veryveryveryverylonglastname" },<br> { "Richard", "A.", "Tattersall" },<br> { "Philip", "B.", "Edwards" },<br> { "Moore", "T.", "Moore" },<br> };<br> JTable table = new JTable(names, columnNames);</p> <p> public Test() {<br> TableColumn mid = table.getColumn(columnNames[1]);<br> TableColumn last = table.getColumn(columnNames[2]);</p> <p> int midWidth = getPreferredWidthForColumn(mid),<br> lastWidth = getPreferredWidthForColumn(last);</p> <p> mid.setMinWidth(midWidth);<br> mid.setMaxWidth(midWidth);</p> <p> last.setMinWidth(lastWidth);</p> <p> // sizeColumnsToFit() must be called due to a JTable<br> // bug ...<br> table.sizeColumnsToFit(0);</p> <p> getContentPane().add(new JScrollPane(table), <br> BorderLayout.CENTER);<br> }<br> public int getPreferredWidthForColumn(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>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -