java swing 中JTable實現指定單元格為下拉框


利用自定義的CellEditor實現第四列第二行為下拉框,本列其余行為文本框
利用默認的DefaultCellEditor設置第五列整列為下拉框
 
package mypackage;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.util.EventObject;
import javax.swing.AbstractCellEditor;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.TableCellEditor;
/**
 * 自定義celleditor實現
 * 指定單元格設置下拉框,其他單元格設置文本框
 *
 */
public class JBoxTestCell  extends AbstractCellEditor implements
TableCellEditor {
    int row;
    private JTable table;
    private JPanel p1;
    private JComboBox jbox;
    private Object val = null;
    private JTextField jt_0=new JTextField();
    private JTextField jt_2=new JTextField();
    public JBoxTestCell() {
        p1 = new JPanel(new BorderLayout());
  
        p1.setPreferredSize(new Dimension(300, 30));
        String[] interest1 = { "rap", "手指舞", "理發","沖天炮"};
        jbox = new JComboBox(interest1);
        jbox.setPreferredSize(new Dimension(200,25));
        jbox.setSelectedIndex(0);
        p1.add(jbox, BorderLayout.CENTER);
    }
    @Override
    public boolean isCellEditable(EventObject anEvent) {
        return true;
    }
    public void showSave() {
     jbox.setVisible(true);
    }
    public Object getCellEditorValue() {
       if(row==1) {
     String v1 = jbox.getSelectedItem().toString();
        return v1;
       }
       String result="";
       switch(this.row) {
  case 0 : result = jt_0.getText().trim(); break;
  case 2 : result = jt_2.getText().trim(); break;
       }
       return result;
    }
   
    public Component getTableCellEditorComponent(JTable table, Object value,
            boolean isSelected, int row, int column) {
        this.table = table;
        this.row = row;
        val = value;
        JTextField result = new JTextField();
  switch(this.row) {
  case 0 : result = jt_0; break;
  case 1 : return this.jbox;
  case 2 : result = jt_2; break;
  }
  return result;
    }
}
 
 
 
 
package mypackage;
import java.awt.Dimension;
import java.util.Vector;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.table.TableColumnModel;
import java.awt.Font;
/**
 * 測試類
 * 實現第四列第二行為下拉框,其余行為文本框
 * 第五列一列為下拉框
 */
public class Test {
 
 public static void main(String[] args) {
  JFrame frame = new JFrame();
  frame.setBounds(100, 100, 500, 400);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.getContentPane().setLayout(null);
  JPanel panel = new JPanel();
  panel.setLayout(null);
  panel.setBounds(0, 0, 484, 361);
  frame.getContentPane().add(panel);
  frame.setVisible(true);
  
  String[][] str= {{"小賈","13","160","帽子",""},{"阿P","16","165","rap",""},{"小李","19","158","做頭發",""}};
  String[] title= {"姓名","年齡","身高","愛好1","愛好2"};
  JTable table = new JTable(str,title);//測試表格
  table.setFont(new Font("微軟雅黑", Font.PLAIN, 12));
  
  JScrollPane scrollPane_1 = new JScrollPane(table);//滾動組件
  scrollPane_1.setBounds(0, 0, 484, 361);
  scrollPane_1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
  panel.add(scrollPane_1);
  
  JBoxTestCell jc = new JBoxTestCell();//第四列第二行為下拉框,其余行為文本框
  TableColumnModel tcm = table.getColumnModel();
  tcm.getColumn(3).setCellEditor(jc);
  
  String[] str2 = { "rap", "手指舞", "理發","沖天炮"};
  JComboBox jbox= new JComboBox(str2);
  jbox.setSelectedIndex(0);
  TableColumnModel col = table.getColumnModel();
  col.getColumn(4).setCellEditor(new DefaultCellEditor(jbox));//設置第5列一列為下拉框
 }
}
 
效果圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM