2013年6月10日 星期一

JCombobox下拉式結合Table(表格)

JComboboxWithJTable


一、首先設計一類別並繼承自JCombobox,而後進行版面配置及加入資料動作

(一)建構子利用setDefaultTableModel();進行相關設置

(二)setDefaultTableModel內容說明
private void setDefaultTableModel(){
           DefaultTableModel tm = new DefaultTableModel(new Object[][]{},new String[]{"編號", "姓名"}); //建立DefaultTableModel並設定欄位
           for (int i = 0;i < 100;i++) tm.addRow(new String[]{"0"+i,String.valueOf((char)('a'+i)) + "XSDDI"});//加入100筆虛擬資料
           table.setModel(tm);//此table為全域,並設定Model為剛剛所創建之
           table.setTableHeader(new JTableHeader());//去除標頭
           table.addMouseListener(new MouseAdapter() {//加入滑鼠點擊事件
           @Override
public void mouseClicked(MouseEvent e) {
           setEvent();
           }
    });
           this.setEditable(true);//將Combobox設為可編輯,不只下拉選擇
           JPanel popupPanel = new JPanel();//建立一Panel放置表格用
           popupPanel.setBorder(new javax.swing.border.EmptyBorder(5,5,5,5));
           popupPanel.setLayout(new BorderLayout());
           popupPanel.setPreferredSize(new Dimension(150,150));//設定大小
           JScrollPane jsp = new JScrollPane(table);//建立卷軸以放置Table,以便進行伸縮捲動
           popupPanel.add(jsp);
           try { this.setPopupComponent(popupPanel); } //設置元件   
           catch (Exception e) {e.printStackTrace();}         
}
(三)利用setPopupComponent()及getComboPopup()完成加入Pop元件
private BasicComboPopup getComboPopup() {
          for (int i=0, n=getUI().getAccessibleChildrenCount(this); i<n; i++) {//進行搜尋
                   Object component = getUI().getAccessibleChild(this, i);
                   if (component instanceof BasicComboPopup) {return (BasicComboPopup) component;}
          }
return null;
}

public void setPopupComponent(JComponent component) throws Exception {
             BasicComboPopup comboPopup=getComboPopup();//ComboPopup 介面基本實作
                      if (comboPopup!=null && comboPopup instanceof JPopupMenu) {//將原本內容替換
                                   comboPopup.removeAll();
                                   comboPopup.add(component);
                      }
}
(四)相關事件
private void setEvent() {
this.setSelectedItem(table.getValueAt(table.getSelectedRow(), 0));//取得點選值
this.setPopupVisible(false); //將Pop隱藏
}
二、原始碼下載
-->

沒有留言:

張貼留言