首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

jcombobox与jtable的连接解决方法

2012-01-09 
jcombobox与jtable的连接eg:jcombobox下拉菜单里有三个值a、b、c,现在想要使当选择 a 时,对应显示表格 a ;相

jcombobox与jtable的连接
eg:jcombobox下拉菜单里有三个值a、b、c,
现在想要使当选择 a 时,对应显示表格 a ;
相应 选择 b 时,对应显示表格 b ;
选择 c ,显示表格 c ;

[解决办法]
这是三个数据模型相同的JTable的控制显示,只是切换JTable的数据模型就可以,你先看看,待会再贴数据模型不同的控制

Java code
import javax.swing.*;import javax.swing.event.*;import javax.swing.table.*;import java.awt.*;import java.awt.event.*;import java.util.*;import java.util.List;public class JTableDemo4 extends JFrame implements ActionListener{    private JTable[] jTable=new JTable[3];    //    private JButton bn1,bn2,bn3;    private JComboBox combobox=null;    private JPanel panel=null;    private MyModel[] model=new MyModel[3];    private JScrollPane s_pane=null;    private Container contentPane=null;    public JTableDemo4(String title){        super(title);        model[0]=new MyModel(2);        jTable[0]=new JTable(model[0]);        model[1]=new MyModel(4);        jTable[1]=new JTable(model[1]);        model[2]=new MyModel(6);        jTable[2]=new JTable(model[2]);        contentPane=this.getContentPane();        combobox=new JComboBox();        combobox.addItem("table1(2 users)");        combobox.addItem("table2(4 users)");        combobox.addItem("table3(6 users)");        combobox.addActionListener(this);        panel=new JPanel();        panel.add(combobox);        List<User> list1=new ArrayList<User>();        for(int i=0;i<3;i++){            User u=new User(i,"user"+i,"list1");            list1.add(u);        }        s_pane=new JScrollPane(jTable[0]);        contentPane.add(panel,BorderLayout.SOUTH);        contentPane.add(s_pane,BorderLayout.CENTER);        pack();        setVisible(true);        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    }    public void actionPerformed(ActionEvent e) {        // TODO Auto-generated method stub        System.out.println("action performed");        int index=combobox.getSelectedIndex();        System.out.println("index:"+index);        jTable[0].setModel(model[index]);        jTable[0].updateUI();//        s_pane.removeAll();//        s_pane.add(jTable[index]);////        s_pane=new JScrollPane();////        s_pane.validate();//        contentPane.validate();//        this.validate();//        this.repaint();    }    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        new JTableDemo4("MyDemo");    }    class MyModel extends AbstractTableModel{        private ArrayList<User> list;        private String [] title_name={"ID","用户名","密码"};        /**         * 初始化构造         */        public MyModel(){            list=new ArrayList<User>();            for(int i=0;i<5;i++){                User user=new User(i,"user"+i,"user"+i);                this.list.add(user);            }            /*                * 这里数据结构当中加进去多少的数据,                * 虚拟机会利用getValueAt(int row,int col)方法                * 全部给取出显示                */        }        public MyModel(int userNum){            list=new ArrayList<User>();            for(int i=0;i<userNum;i++){                User user=new User(i,"user"+i,"user"+i);                this.list.add(user);            }            /*                * 这里数据结构当中加进去多少的数据,                * 虚拟机会利用getValueAt(int row,int col)方法                * 全部给取出显示                */        }        public void addRow(long id,String userName,String password){            User user=new User(id,userName,password);            list.add(user);        }        public void removeRaw(int row){            list.remove(row);            this.fireTableRowsDeleted(1,row+1);        }        public int getColumnCount() {            // TODO Auto-generated method stub            System.out.println("invoke method getColumnCount");            return title_name.length;        }        public String getColumnName(int col) {            System.out.println("invoke method getColumnName");            return title_name[col];        }        public int getRowCount() {            // TODO Auto-generated method stub            return list.size();        }        public Object getValueAt(int rowIndex, int columnIndex) {            // TODO Auto-generated method stub            //System.out.println("invoke method getValueAt");            User result=list.get(rowIndex);            return result.get(columnIndex);        }        public void setValueAt(Object value, int row, int col){            if(col==0)                list.get(row).setId((Long)value);            if(col==1)                list.get(row).setUserName((String)value);            if(col==2)                list.get(row).setPassword((String)value);            this.fireTableCellUpdated(row, col);        }        public boolean isCellEditable(int rowIndex, int columnIndex){            return true;        }        /**         * 返回数据类型         */        public Class getColumnClass(int col) {            return getValueAt(0, col).getClass();        }    }    class User{        private long id;        private String userName;        private String password;        public User(){}        public User(long id,String userName,String password){            this.id=id;            this.userName=userName;            this.password=password;        }        public Object get(int i){            if(i==0)                return this.id;            if(i==1)                return this.userName;            if(i==2)                return this.password;            else                return null;        }        public String getPassword() {            return password;        }        public void setPassword(String password) {            this.password = password;        }        public String getUserName() {            return userName;        }        public void setUserName(String userName) {            this.userName = userName;        }        public long getId() {            return id;        }        public void setId(long id) {            this.id = id;        }    }} 


[解决办法]
下面这个定义了不同的数据模型供你学习,差不多就结贴给分哈

Java code
import javax.swing.*;import javax.swing.event.*;import javax.swing.table.*;import java.awt.*;import java.awt.event.*;import java.util.*;import java.util.List;public class JTableDemo5 extends JFrame implements ActionListener{    private JTable[] jTable=new JTable[3];    private JComboBox combobox=null;    private JPanel panel=null;    private TableModel[] model=new TableModel[3];    private JScrollPane s_pane=null;    private Container contentPane=null;    public JTableDemo5(String title){        super(title);        model[0]=new MyModel(2);        jTable[0]=new JTable(model[0]);        model[1]=new Table_Model(4);  //不同数据模型的表        jTable[1]=new JTable(model[1]);        model[2]=new MyModel(6);        jTable[2]=new JTable(model[2]);        contentPane=this.getContentPane();        combobox=new JComboBox();        combobox.addItem("table1(2 users)");        combobox.addItem("table2(4 users)");        combobox.addItem("table3(6 users)");        combobox.addActionListener(this);        panel=new JPanel();        panel.add(combobox);        s_pane=new JScrollPane(jTable[0]);        contentPane.add(panel,BorderLayout.SOUTH);        contentPane.add(s_pane,BorderLayout.CENTER);        pack();        setVisible(true);        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    }    public void actionPerformed(ActionEvent e) {        // TODO Auto-generated method stub        System.out.println("action performed");        int index=combobox.getSelectedIndex();        System.out.println("index:"+index);        contentPane.remove(s_pane);        s_pane=new JScrollPane(jTable[index]);        contentPane.add(s_pane,BorderLayout.CENTER);        this.repaint();        this.validate();    }    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        new JTableDemo5("MyDemo");    }    class MyModel extends AbstractTableModel{        private ArrayList<User> list;        private String [] title_name={"ID","username","password"};        public MyModel(){            list=new ArrayList<User>();            for(int i=0;i<5;i++){                User user=new User(i,"user"+i,"user"+i);                this.list.add(user);            }        }        public MyModel(int userNum){            list=new ArrayList<User>();            for(int i=0;i<userNum;i++){                User user=new User(i,"user"+i,"user"+i);                this.list.add(user);            }        }        public void addRow(long id,String userName,String password){            User user=new User(id,userName,password);            list.add(user);        }        public void removeRaw(int row){            list.remove(row);            this.fireTableRowsDeleted(1,row+1);        }        public int getColumnCount() {            // TODO Auto-generated method stub//            System.out.println("invoke method getColumnCount");            return title_name.length;        }        public String getColumnName(int col) {//            System.out.println("invoke method getColumnName");            return title_name[col];        }        public int getRowCount() {            // TODO Auto-generated method stub            return list.size();        }        public Object getValueAt(int rowIndex, int columnIndex) {            // TODO Auto-generated method stub            //System.out.println("invoke method getValueAt");            User result=list.get(rowIndex);            return result.get(columnIndex);        }        public void setValueAt(Object value, int row, int col){            if(col==0)                list.get(row).setId((Long)value);            if(col==1)                list.get(row).setUserName((String)value);            if(col==2)                list.get(row).setPassword((String)value);            this.fireTableCellUpdated(row, col);        }        public boolean isCellEditable(int rowIndex, int columnIndex){            return true;        }        /**         * ???????????         */        public Class getColumnClass(int col) {            return getValueAt(0, col).getClass();        }    }    class User{        private long id;        private String userName;        private String password;        public User(){}        public User(long id,String userName,String password){            this.id=id;            this.userName=userName;            this.password=password;        }        public Object get(int i){            if(i==0)                return this.id;            if(i==1)                return this.userName;            if(i==2)                return this.password;            else                return null;        }        public String getPassword() {            return password;        }        public void setPassword(String password) {            this.password = password;        }        public String getUserName() {            return userName;        }        public void setUserName(String userName) {            this.userName = userName;        }        public long getId() {            return id;        }        public void setId(long id) {            this.id = id;        }    }}class Table_Model extends AbstractTableModel {    private static final long serialVersionUID = -7495940408592595397L;    private Vector content = null;    private String[] title_name = { "ID", "姓名", "性别", "年龄" };    public Table_Model() {        content = new Vector();    }    public Table_Model(int count) {        content = new Vector(count);        for(int i=0;i<count;i++){            addRow("person"+i,true,String.valueOf(i));        }    }    public void addRow(String name, boolean sex, String age) {        Vector v = new Vector(4);        v.add(0, new Integer(content.size()));        v.add(1, name);        v.add(2, new Boolean(sex));        v.add(3, age);        content.add(v);    }    public void removeRow(int row) {        content.remove(row);    }    public void removeRows(int row, int count) {        for (int i = 0; i < count; i++) {            if (content.size() > row) {                content.remove(row);            }        }    }    /**    * 让表格中某些值可修改,但需要setValueAt(Object value, int row, int col)方法配合才能使修改生效    */    public boolean isCellEditable(int rowIndex, int columnIndex) {        if (columnIndex == 0) {            return false;        }        return true;    }    /**    * 使修改的内容生效    */    public void setValueAt(Object value, int row, int col) {        ((Vector) content.get(row)).remove(col);        ((Vector) content.get(row)).add(col, value);        this.fireTableCellUpdated(row, col);    }    public String getColumnName(int col) {        return title_name[col];    }    public int getColumnCount() {        return title_name.length;    }    public int getRowCount() {        return content.size();    }    public Object getValueAt(int row, int col) {        return ((Vector) content.get(row)).get(col);    }    /**    * 返回数据类型    */    public Class getColumnClass(int col) {        return getValueAt(0, col).getClass();    }} 

热点排行