⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s19.htm

📁 提供给JAVA编程者图形界面卷
💻 HTM
📖 第 1 页 / 共 5 页
字号:
              public int getColumnCount() { <br>              return columnNames.length;<br>              }<br>              public String getColumnName(int col) {<br>              return columnNames[col];<br>              }<br>              public Class getColumnClass(int col) {<br>              return data[0][col].getClass();<br>              }<br>              public void setValueAt(Object value, int row, int col) {<br>              data[row][col] = value;<br>              fireTableCellUpdated(row, col);<br>              }<br>              public boolean isCellEditable(int row, int col) {<br>              Class cls = getColumnClass(col);<br>              String name = getColumnName(col);</p>            <p> return (cls == Boolean.class &amp;&amp; !name.equals(&quot;Dolby&quot;))               ||<br>              cls == Integer.class || cls == Double.class;<br>              }<br>              public void updateBulbs(int selectedRow) {<br>              for(int r=0; r &lt; getRowCount(); ++r) {<br>              data[r][0] = new Boolean(r == selectedRow);<br>              }<br>              }<br>              }</p>            <hr size="1" noshade>            <p align="center">&nbsp; </p>            <p align="center"><b>例19-12 使用绘制器和编辑器</b></p>            <hr noshade size="1">            import java.awt.*;<br>            import java.awt.event.*;<br>            import java.text.*;<br>            import java.util.*;<br>            import javax.swing.*;<br>            import javax.swing.event.*;<br>            import javax.swing.table.*;            <p>public class Test extends JFrame {<br>              JTable table = new JTable(new StereoDeckModel());</p>            <p> public Test() {<br>              initializeInUseColumn();<br>              initializePriceColumn();<br>              initializeVolumeColumn();<br>              sizeColumns();</p>            <p> table.setSelectionMode(<br>              ListSelectionModel.SINGLE_SELECTION);</p>            <p> table.getSelectionModel().addListSelectionListener(<br>              new ListSelectionListener() {<br>              public void valueChanged(ListSelectionEvent e) {<br>              StereoDeckModel model = <br>              (StereoDeckModel)table.getModel(); </p>            <p> if(!e.getValueIsAdjusting()) {<br>              model.updateBulbs(table.getSelectedRow());<br>              }<br>              }<br>              });<br>              getContentPane().add(new JScrollPane(table),<br>              BorderLayout.CENTER);<br>              }<br>              private void initializeInUseColumn() {<br>              TableColumn inUseColumn = table.getColumn(&quot;In Use&quot;);<br>              <br>              inUseColumn.setCellRenderer(new BulbRenderer());<br>              inUseColumn.setCellEditor(new BulbEditor());<br>              }<br>              private void initializePriceColumn() {<br>              TableColumn priceColumn = table.getColumn(&quot;Price&quot;);<br>              JComboBox combo = new JComboBox();</p>            <p> // Combo box items are Numbers ...<br>              combo.addItem(new Double(159.99));<br>              combo.addItem(new Double(169.99));<br>              combo.addItem(new Double(229.99));<br>              combo.addItem(new Double(449.99));<br>              combo.addItem(new Double(699.99));</p>            <p> combo.setRenderer(new ListCellCurrencyRenderer());</p>            <p> priceColumn.setCellRenderer(<br>              new TableCellCurrencyRenderer());</p>            <p> priceColumn.setCellEditor(new PriceEditor(combo));<br>              }<br>              private void initializeVolumeColumn() {<br>              TableColumn volumeColumn = table.getColumn(&quot;Volume&quot;);<br>              TableCellRenderer renderer = new VolumeRenderer();<br>              TableCellEditor editor = new VolumeEditor();</p>            <p> volumeColumn.setCellRenderer(renderer);<br>              volumeColumn.setCellEditor(editor);</p>            <p> Dimension ps = ((JPanel)renderer).getPreferredSize();<br>              table.setRowHeight(ps.height);<br>              }<br>              public static void main(String args[]) {<br>              GraphicJavaApplication.launch(<br>              new Test(), &quot;Car Stereo Deck&quot;, 300,300,559,368);<br>              }<br>              private void sizeColumns() {<br>              TableColumnModel tcm = table.getColumnModel();</p>            <p> for(int i=0; i &lt; tcm.getColumnCount(); ++i) {<br>              TableColumn column = tcm.getColumn(i);<br>              int w = getPreferredWidthForColumn(column);</p>            <p> column.setMinWidth(w);<br>              column.setMaxWidth(w);<br>              }<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 &gt; cw ? hw+10 : cw+10;<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 &lt; 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 &gt; maxw ? width : maxw;<br>              }<br>              return maxw;<br>              }<br>              }<br>              class ListCellCurrencyRenderer extends DefaultListCellRenderer {<br>              public Component getListCellRendererComponent(<br>              JList list,<br>              Object value,<br>              int index,<br>              boolean isSelected,<br>              boolean hasFocus) {<br>              JLabel c = (JLabel)<br>              super.getListCellRendererComponent(<br>              list, value, index,<br>              isSelected, hasFocus);</p>            <p> Format format = NumberFormat.getCurrencyInstance();<br>              c.setText(value == null ? &quot;&quot; : format.format(value));<br>              return c;<br>              }<br>              }<br>              class TableCellCurrencyRenderer extends DefaultTableCellRenderer               {<br>              public void setValue(Object value) {<br>              Format format = NumberFormat.getCurrencyInstance();<br>              super.setValue(value == null ? &quot;&quot; : format.format(value));<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">&nbsp; </p>            <p> 19.6.2 表格单绘制器</p>            <p>&nbsp;</p>            <p align="center"><b>例19-13 VolumeRenderer</b></p>            <hr noshade size="1">            import java.awt.*;<br>            import javax.swing.*;<br>            import javax.swing.event.*;<br>            import javax.swing.table.*;            <p>class VolumeRenderer extends JPanel<br>              implements TableCellRenderer {<br>              private JSlider slider = new JSlider();<br>              private JLabel label = new JLabel(&quot;value&quot;);</p>            <p> public VolumeRenderer() {<br>              slider.setOrientation(SwingConstants.HORIZONTAL);<br>              slider.setPreferredSize(new Dimension(200,30));<br>              slider.putClientProperty(&quot;JSlider.isFilled&quot;,Boolean.TRUE);</p>            <p> label.setHorizontalAlignment(JLabel.CENTER);<br>              label.setHorizontalTextPosition(JLabel.CENTER);</p>            <p> setLayout(new BorderLayout());<br>              add(label, BorderLayout.NORTH);<br>              add(slider, BorderLayout.CENTER);</p>            <p> slider.addChangeListener(new ChangeListener() {<br>              public void stateChanged(ChangeEvent e) {<br>              label.setText(<br>              Integer.toString(slider.getValue()));<br>              }<br>              });<br>              }<br>              public Component getTableCellRendererComponent(<br>              JTable table, Object value,<br>              boolean isSelected,<br>              boolean hasFocus,<br>              int row, int col) {<br>              Integer v = (Integer)value;</p>            <p> slider.setValue(v.intValue());<br>              label.setText(v.toString());</p>            <p> slider.setEnabled(isSelected);<br>              label.setEnabled(isSelected);</p>            <p> return this;<br>              }<br>              public JSlider getSlider() {<br>              return slider;<br>              }<br>              public JLabel getLabel() {<br>              return label;<br>              }<br>              }</p>            <hr size="1" noshade>            <p align="center">&nbsp; </p>            <p> 19.6.3 Default Table Cell Renderer类</p>            <p>&nbsp;</p>            <p align="center"><b>例19-14 BulbRenderer</b></p>            <hr noshade size="1">            import java.awt.*;<br>            import javax.swing.*;<br>            import javax.swing.table.*;            <p>class BulbRenderer extends DefaultTableCellRenderer {<br>              private ImageIcon darkBulb = new ImageIcon(&quot;button.jpg&quot;),<br>              brightBulb = new ImageIcon(&quot;button_lit.jpg&quot;);</p>            <p> public BulbRenderer() {<br>              setHorizontalAlignment(JLabel.CENTER);<br>              }<br>              public Component getTableCellRendererComponent(<br>              JTable table, Object value,<br>              boolean isSelected,<br>              boolean hasFocus,<br>              int row, int col) {<br>              Boolean b = (Boolean)value;<br>              setIcon(b.booleanValue() ? brightBulb : darkBulb);<br>              return this;<br>              }<br>              }</p>            <hr size="1" noshade>            <p align="center">&nbsp; </p>            <p> 19.6.4 表格格式化绘制器</p>            <p>&nbsp;</p>            <p align="center">&nbsp; </p>            <p> 19.6.5 单元编辑器</p>            <p>&nbsp;</p>            <p align="center">&nbsp; </p>            <p> 19.6.6 表格单编辑器</p>            <p>&nbsp;</p>            <p align="center">&nbsp; </p>            <p> 19.6.7 实现TableCellEditor接口</p>            <p>&nbsp;</p>            <p align="center"><b>例19-15 AbstractCellEditor</b></p>            <hr noshade size="1">            import java.awt.*;<br>            import javax.swing.*;<br>            import javax.swing.event.*;<br>            import javax.swing.table.*;<br>            import javax.swing.tree.*;<br>            import java.awt.event.MouseEvent;<br>            import java.util.EventObject;            <p>abstract public class AbstractCellEditor <br>              implements TableCellEditor {<br>              protected EventListenerList listenerList = <br>              new EventListenerList();<br>              protected Object value;<br>              protected ChangeEvent changeEvent = null;<br>              protected int clickCountToStart = 1;</p>            <p> public Object getCellEditorValue() {<br>              return value;<br>              }<br>              public void setCellEditorValue(Object value) {<br>              this.value = value;<br>              }<br>              public void setClickCo

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -