一、首先設計一類別並繼承自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隱藏 } |
-->
留言
張貼留言