目前日期文章:200910 (8)

瀏覽方式: 標題列表 簡短摘要

一直以來對 TableCellRenderer 都搞不清楚,明明就只有一個簡單的函數,但是說明也太少了,少到完全不知要怎麼實現。現在就來看下面程式碼來搞清楚。

原始碼下載
String[] columnNames = { .....
Object[][] data = {.....
jTable = new JTable(data, columnNames);
jTable.getColumn("C").setCellRenderer(new ButtonRenderer());

public class ButtonRenderer extends JButton implements TableCellRenderer {
    public Component getTableCellRendererComponent(JTable arg0, Object arg1, boolean arg2,
        boolean arg3, int arg4, int arg5)
    {
        this.setText((arg1 == null) ? "null" : arg1.toString());
        return this;
    }
}

上面的範例很簡單就是把 C 那一列都顯示 button,而 Object arg1 就是代表該儲存格的物件。如果把 this.setText 這一行拿掉,就只有顯示空白按鈕而已。所以從此就可以推論每一個儲存格要顯示時,都會呼叫 TableCellRenderer 傳回一個物件去顯示,而且每一個儲存格都有自己的 TableCellRenderer,預設為 DefaultTableCellRenderer。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

JTable 的選擇模式主要是靠下列三個函數來做設定。
  1. public void setColumnSelectionAllowed(boolean columnSelectionAllowed)
    設置是否可以選擇此模型中的列。
  2. public void setRowSelectionAllowed(boolean rowSelectionAllowed)

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

C# 的事件處理模式

C# 的事件處理模式很簡單,打開屬性視窗(Property Window),先看到是表單的屬性,接著點選屬性視窗上方的閃電圖示按鈕,就可以看到跟表單相關的事件。如 Click 事件就是在表單上單擊滑鼠的事件,如 MouseMove 事件就是當滑鼠游標在表單上移動的事件。相關程式代碼如下:

private void InitializeComponent()
{
    ..... 略
    this.Click += new System.EventHandler(this.Form1_Click);
    this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseMove);
}

private void Form1_Click(object sender, System.EventArgs e)
{
    this.Text = "Form1 被滑鼠點擊過了";
}

private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
    this.Text = "Form1 上的滑鼠移動過了";
}

程式人員只要撰寫 Form1_Click 及 Form1_MouseMove 裏面的代碼即可,相關的初始化代碼 InitializeComponent 由 C# 自動產生了,很簡單又方便吧。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

  1. 在 Palette→Swing Menus 點選 JMenuBar。
  2. 把滑鼠移到 JFrame 的標題列上,按一下左鍵,安裝 JMenuBar。這時程式會在 initialize 出現 this.setJMenuBar(getJJMenuBar());。
  3. 這時候應該看不太到 JMenuBar,所以需要另一個視窗 Java Beans。
  4. 在 Palette→Swing Menus 點選 JMenu。
  5. 把滑鼠移到 Java Beans 視窗裏的 jJMenuBar 上,按一下左鍵,安裝 JMenu。這時程式會在 getJJMenuBar 出現 jJMenuBar.add(getJMenu());。
  6. 這時候應該看不太到 JMenuBar 及 JMenu,所以需要另一個視窗 Properties。
  7. 把滑鼠移到 Java Beans 視窗裏的 jMenu 上,按一下左鍵;再移到 Properties 視窗,找到 text 屬性,在 text 右邊的空白欄位輸入 TEST。這個時候就可以看到 JMenuBar 及 TEST 的選單按鍵了。
  8. 在 Palette→Swing Menus 點選 JMenuItem。
  9. 把滑鼠移到 Java Beans 視窗裏的 jMenu 上,按一下左鍵,安裝 JMenuItem。這時程式會在 getJMenu 出現 jMenu.add(getJMenuItem());。
  10. 把滑鼠移到 Java Beans 視窗裏的 jMenuItem 上,按一下左鍵;再移到 Properties 視窗,找到 text 屬性,在 text 右邊的空白欄位輸入 123。
  11. JMenuItem 在 visual editor 是看不到的,都需要透過 Java Beans 視窗來操作。
  12. 接下來就依上述方法泡製,做出你所需要的選單。
  13. to be continue....

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()



台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

  1. Q: 如何將一般的 java 檔案切換成有 Palette 的所見即所得的 Visual java 檔案模式?
    在檔案點右鍵選 Open With --> Visual Editor 即可。原來是因為用不同編輯器來編輯,一開始還以為是同一個編輯器,利用程式碼內的 JFrame 來判斷,最後複制整個程式碼貼過去也不能用,才懷疑是其它設定的問題。
  2. Q: 如果要在 java 內使用新的 library(JAR),可以使用下列方法新增。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

  1. 從 Swing Containers 點選 JTabbedPane。
  2. 在 JFrame 裏選定位置按一下,放置好 JTabbedPane。
  3. 這時候 JTabbedPane 只有小小一點,利用滑鼠把它拉大。
  4. 從 Swing Containers 點選 JPanel。
  5. 在 JTabbedPane 裏按一下,放置好 JPanel。
  6. 在 JPanel 點一下,不要點在分頁上面喔。
  7. 在 Properties 內,修改 tab title 內容為 "TEST1"。
  8. 從 Swing Containers 點選 JPanel。
  9. 把滑鼠移到 JTabbedPane 上的分頁(這時應該會出現第二個分頁),切記不要移到 JPanel (這時第二個分頁會消失),點一下滑鼠左鍵會建立第二個分頁
  10. 這時點一下第二個分頁,再點一下下面的 JPanel.
  11. 在 Properties 內,修改 tab title 內容為 "TEST2"。
  12. 這樣就建立好二個不同的分頁了,後面如法泡製。
  13. to be continue...

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

  1. 先建立一個連線到 "jdbc:access:///"。
  2. 再取得 statement 物件,如果沒有連線是取不到 statement 物件的。
  3. 最後利用 "create database test" 來建立 test.MDB 檔案。
  4. 當然最後要再重新連線一次,以正式取得 test.MDB,別忘了喔。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class test {
    public static void main(String[] args) {
        Connection conn = null;
        try {
            Class.forName("com.hxtt.sql.access.AccessDriver").newInstance();
        } catch (Exception e) {
            System.out.println("driver not installed");
            System.exit(1);
        }
        try {
            conn = DriverManager.getConnection("jdbc:access:///test.mdb", "", "");
        } catch (Exception e) {
            System.out.println("file not existed");
        }
        if (conn == null) {
            try {
                conn = DriverManager.getConnection("jdbc:access:///");
                Statement stmt=conn.createStatement();
                stmt.executeUpdate("create database test");
                conn = DriverManager.getConnection("jdbc:access:///test.mdb", "", "");
            } catch (Exception e) {
                System.out.println(e.getMessage());
                e.printStackTrace();
            }
        }
    }
}

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()