隨筆 - 6  文章 - 1  trackbacks - 0
          <2008年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          typeTable.setPreferredScrollableViewportSize(typeTable.getPreferredSize());
          JScrollPane typeTableScrollPane
          =new JScrollPane(typeTable);

          mt.pack();
          mt.setVisible(
          true);
          import java.awt.*;

          import javax.swing.*;

          public class MixerTest2 extends JFrame {

          public MixerTest2() {
          super("Customer Editor Test");
          setSize(
          600,160);
          setDefaultCloseOperation(EXIT_ON_CLOSE);

          JTable typeTable
          =new JTable();
          typeTable
          =new JTable(new String [][] {
          {"312fs""33232""32""32"},
          {"3212fsdfa12""3322""32""32"},
          {"3212fa12""321212""321212""321212"},
          {"3212gsds12""321212""321212""321212"}
          }
          ,
          new String [] {
          "Title 1""Title 2""Title 3""Title 4"
          }

          );
          typeTable.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);

          typeTable.getColumnModel().getColumn(
          0).setPreferredWidth(10);
          typeTable.getColumnModel().getColumn(
          1).setPreferredWidth(30);
          JScrollPane typeTableScrollPane
          =new JScrollPane(typeTable);

          getContentPane().add(typeTableScrollPane);
          }


          public static void main(String args[]) {
          MixerTest2 mt 
          = new MixerTest2();
          mt.setVisible(
          true);
          }

          }

          在上面的代碼中,我打算在JTable初始化的過程中,調用typeTable.getColumnModel().getColumn(0).setPreferredWidth(10);初始化各列的寬度。
          但實際的情況是,只有我將初始值設為大于75時,該命令才會成功,否則就是各列均等。
          原因:
          沒有具體指定寬度的列,JTable會默認的設置為75。
          JTable 的寬度=10+30+75+75=190 
          而在我的這個樣例程序中,JFrame 寬度為600,遠遠大于JTable 的寬度。因此程序按照我的初始值繪制完JTable之后,會自動的根據JFrame 的大小及布局再重新調整。這樣就造成與代碼不符的情況。
          在網上查詢到,有人推薦使用Table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);這樣會解決問題,但同時我們也失去使用AutoResizeMode的好處。
          將代碼修改如下,問題解決:
          typeTable.setPreferredScrollableViewportSize(typeTable.getPreferredSize());
          JScrollPane typeTableScrollPane
          =new JScrollPane(typeTable);

          mt.pack();
          mt.setVisible(
          true);





          posted @ 2008-12-12 14:06 川流不息 閱讀(2305) | 評論 (0)編輯 收藏

          使用命令重新設置JPanel的布局。
          1)在JPanel上添加或者刪除組件;
          2)完成布局;
          3)調用 validate();使新布局有效。

          posted @ 2008-12-12 13:43 川流不息 閱讀(304) | 評論 (0)編輯 收藏

          Look And Feel for NetBeans

          此帖討論NetBeans的非默認樣式的用法,基于命令行。
          這里筆者將“laf(Look And Feel)”譯為“樣式”

          因為NetBeans是基于Swing的,這使得NetBeans具有了百變面孔,相當可愛喲!

          了解Java Swing 的人可能知道Swing 的Look and Feel 是很靈活的,現在就有很多的實現。下面是筆者知道的windows平臺的一些列表:
          其中前四種是jdk自帶的,后三種比較有趣。(因為筆者還沒有申請到opensolaris,只知道windows,渴望中)。
          注意今天的實現方式是跨平臺的。

          打開這個路徑C:\Program Files\netbeans-5.5\bin,檢查是否有nb.exe
          打開命令行輸入cd "C:\Program Files\netbeans-5.5\bin"回車
          輸入nb --laf javax.swing.plaf.metal.MetalLookAndFeel
          這樣NetBeans就打開了,其樣式與原來的有什么不同?下面是筆者的圖片
          命令行:

          NetBeans:


          用這種方法可以順利的看到前四種的結果,其中第3種是windows下NetBeans默認的樣式。
          而對于其它三種則沒有效果,因為根本就沒有找到那些類。
          輸出窗口報錯如下:
          UI class not found, using default UI...

          現在介紹其它三種效果的實現方法。
          首先,需要獲得它們的jar包,你可能已發現我在上面給這三種樣式加了鏈接,點進去下載吧
          下面以substance為例,這兒下它的包
          https://substance.dev.java.net/files/documents/3294/55844/substance.jar
          放到D:\下
          打開命令行輸入cd "C:\Program Files\netbeans-5.5\bin"回車
          輸入nb --cp:a "D:\substance.jar" --laf org.jvnet.substance.SubstanceLookAndFeel
          這樣NetBeans就打開了,其樣式與原來的有什么不同?下面是筆者的圖片



          ---------------------------------------------------------------------------------------------------------------------------------------------------------------

          每次都在命令行中啟動,過于繁瑣。可以在NETBEAN 的配置文件中加入配置參數:
          1)下載 look and feel jar 包到硬盤上
          2)打開netbean安裝路徑下的etc\netbeans.conf
                 增加下面一下行:
                 netbeans_default_options="--cp:p C:\javaplugin\PgsLookAndFeel.jar --laf com.pagosoft.plaf.PgsLookAndFeel"
                 --cp:p C:\javaplugin\PgsLookAndFeel.jar 作用是把look and feel jar 加到Netbean啟動路徑上;
                 --laf com.pagosoft.plaf.PgsLookAndFeel  作用為啟用指定的look and feel。
          posted @ 2008-11-14 11:52 川流不息 閱讀(1678) | 評論 (0)編輯 收藏
          數據庫為 JavaFee.mdb 存放在DATA 目錄下,密碼為:1234.
          連接語句如下
          try {
                      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                      String path=System.getProperty("user.dir");
                      String strurl = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+path+"\\Data\\JavaFee.mdb;pwd="+"1234"+";";
                      try {
                          con = DriverManager.getConnection(strurl);
                      } catch (SQLException ex) {
                          JOptionPane.showMessageDialog(MoneyControlView.this, "數據庫文件丟失,請檢查!", "數據檢查", JOptionPane.ERROR_MESSAGE);
                      }
                  } catch (ClassNotFoundException ex) {
                      Logger.getLogger(MoneyControlView.class.getName()).log(Level.SEVERE, null, ex);
                  }
          posted @ 2008-10-02 03:07 川流不息 閱讀(727) | 評論 (0)編輯 收藏
          最近在做一個小數據庫程序,數據庫選用ACCESS。
          在ACCESS中建表 feeDetail
           
          字段   描述
          ID
          fee
          description
          type
          date 記錄插入日期

          程序中SQL 語句:insert into DailyFee(fee,description,type,date) values (?,?,?,?);
          運行卻總是提示語法錯誤,很奇怪,找不出原因。
          在網上狂搜一下,才發現原來ACCESS不允許 采用關鍵字DATE作為字段名,修改字段名,運行,成功。
          posted @ 2008-09-22 11:07 川流不息 閱讀(366) | 評論 (0)編輯 收藏
           簡單來說:

          TableCellRenderer就是用來繪制展示當前cell單元數值內容的,你可以用文字、數值或者圖片來表示內容,當然最強大展示方式的就是通過自定義自己的renderer組件,通過Java2D來繪制各種天花亂墜的效果。


          TableCellEditor主要是用來當用戶點擊在具體cell時進行編輯的組件,所以TableCellEditor除了具有TableCellRenderer一樣的繪制功能外還可以進行交互動作,例如在cell上出現下拉框、勾選框甚至通過按鈕彈出更復雜的對話框讓用戶進行輸入編輯。


          以下是在cell中嵌入start、stop兩個按鈕的表格,注意這里的renderer只是用來顯示效果,并沒有進行交互動作,真正進行動作的是當你將鼠標點擊在cell上時,JTable定位上去的editor,所以不要徒勞在renderer上做點擊事項處理,renderer是不會接受到交互事項的,renderer只是個畫筆,你看到的start、stop按鈕只是這個畫筆畫出來的內容,是虛的并沒有真正的組件在上面。


          import java.awt.*;
          import java.awt.event.*;
          import javax.swing.*;
          import javax.swing.table.*;
          public class TableTest1 extends JFrame {
           JTable table;
           String[] states = new String[]{"stop", "stop", "stop"};
           
           // model
           class TableModel extends AbstractTableModel{
            public int getColumnCount() {
             return 2;
            }
            public int getRowCount() {
             return states.length;
            }
            public Object getValueAt(int rowIndex, int columnIndex) {
             if(columnIndex == 0){
              return states[rowIndex];
             }
             return null;
            }
               public String getColumnName(int columnIndex) {
             if(columnIndex == 0){
              return "state";
             }else{
              return "operate";
             }
               }
               public boolean isCellEditable(int rowIndex, int columnIndex) {
             if(columnIndex == 0){
              return false;
             }else{
              return true;
             }
               }
           }
           
           // cell editor
           class Editor extends AbstractCellEditor implements TableCellEditor, ActionListener {
            int row;
            JTable table;
            JPanel panel;
            JButton start;
            JButton stop;
            Editor(){
             panel = new JPanel();
             panel.setLayout(new GridLayout(1, 2));
             start = new JButton("start");
             stop = new JButton("stop");
             start.addActionListener(this);
             stop.addActionListener(this);
             panel.add(start);
             panel.add(stop);
            }
               public Object getCellEditorValue() {
                   return null;
               }
               public Component getTableCellEditorComponent(JTable table,
                                                            Object value,
                                                            boolean isSelected,
                                                            int row,
                                                            int column) {
                this.table = table;
                this.row = row;
                return panel;
               }
              
            public void actionPerformed(ActionEvent e) {
             if(e.getSource() == start){
              states[row] = "start";
             }else{
              states[row] = "stop";
             }
             ((AbstractTableModel)table.getModel()).fireTableCellUpdated(row, 0);
            }
           
           }
           
           // cell render
           class Renderer extends JComponent implements TableCellRenderer{
            JPanel panel;
            JButton start;
            JButton stop;
            Renderer(){
             panel = new JPanel();
             panel.setLayout(new GridLayout(1, 2));
             start = new JButton("start");
             stop = new JButton("stop");
             panel.add(start);
             panel.add(stop);
            }
            public Component getTableCellRendererComponent(JTable table, Object value,
              boolean isSelected, boolean hasFocus, int row, int column) {
             return panel;
            }
           }
           
           public TableTest1(){
            super("renderer and editor self-existent");
            table = new JTable(new TableModel());
            TableColumn tableColumn = table.getColumnModel().getColumn(1);
            tableColumn.setCellRenderer(new Renderer());
            tableColumn.setCellEditor(new Editor());
           
                  this.getContentPane().setLayout(new BorderLayout());
                  this.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
                  this.setSize(500, 300);
                  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           }
           public static void main(String[] args) {
            new TableTest1().show();
           }
          }

          posted @ 2008-07-25 23:56 川流不息 閱讀(1785) | 評論 (1)編輯 收藏
          主站蜘蛛池模板: 左贡县| 瑞金市| 晋州市| 辽宁省| 巴南区| 安达市| 耒阳市| 车险| 湘乡市| 江安县| 阿城市| 信宜市| 思茅市| 定安县| 嵩明县| 图木舒克市| 咸阳市| 沧源| 达拉特旗| 青田县| 海林市| 桑日县| 武夷山市| 隆化县| 津南区| 晋宁县| 沛县| 绵竹市| 灌南县| 新津县| 江阴市| 独山县| 镶黄旗| 南木林县| 汝城县| 卓资县| 淅川县| 维西| 石林| 紫云| 海城市|