java - JTable with different JComboBox-es for each row -
i created jtable
contains information employees. in jtable added column called "qualifications". column represented jcombobox
(different content @ each row). instance:
row 1 | jcombobox(){"programmer","web"} row 2 | jcombobox(){"writer","editor"}
the jcombobox
content taken list<string> employees[row].getqualification()
.
the problem selected item in row 1 , row 2 "programmer", "programmer" should not appear in row 2. when click on jcombobox
, correct list appears, i.e. row 2 - {"writer","editor"}.
tablecolumn column = table.getcolumnmodel().getcolumn(5); column.setcellrenderer(getrenderer()); private tablecellrenderer getrenderer() { return new tablecellrenderer() { private jcombobox<string> box = new jcombobox<string>(); @override public component gettablecellrenderercomponent(jtable table, object value, boolean isselected, boolean hasfocus, int row, int column) { (string q : employees[row].getqualification()) box.additem(q); box.setbackground(isselected ? table.getselectionbackground() : table.getbackground()); box.setforeground(isselected ? table.getselectionforeground() : table.getforeground()); return box; } }; }
override getcelleditor()
method of jtable
. like:
import java.awt.*; import java.awt.event.*; import java.util.list; import java.util.arraylist; import javax.swing.*; import javax.swing.border.*; import javax.swing.table.*; public class tablecomboboxbyrow extends jpanel { list<tablecelleditor> editors = new arraylist<tablecelleditor>(3); public tablecomboboxbyrow() { setlayout( new borderlayout() ); // create editors used each row string[] items1 = { "red", "blue", "green" }; jcombobox<string> combobox1 = new jcombobox<string>( items1 ); defaultcelleditor dce1 = new defaultcelleditor( combobox1 ); editors.add( dce1 ); string[] items2 = { "circle", "square", "triangle" }; jcombobox<string> combobox2 = new jcombobox<string>( items2 ); defaultcelleditor dce2 = new defaultcelleditor( combobox2 ); editors.add( dce2 ); string[] items3 = { "apple", "orange", "banana" }; jcombobox<string> combobox3 = new jcombobox<string>( items3 ); defaultcelleditor dce3 = new defaultcelleditor( combobox3 ); editors.add( dce3 ); // create table default data object[][] data = { {"color", "red"}, {"shape", "square"}, {"fruit", "banana"}, {"plain", "text"} }; string[] columnnames = {"type","value"}; defaulttablemodel model = new defaulttablemodel(data, columnnames); jtable table = new jtable(model) { // determine editor used row public tablecelleditor getcelleditor(int row, int column) { int modelcolumn = convertcolumnindextomodel( column ); if (modelcolumn == 1 && row < 3) return editors.get(row); else return super.getcelleditor(row, column); } }; jscrollpane scrollpane = new jscrollpane( table ); add( scrollpane ); } private static void createandshowui() { jframe frame = new jframe("table combo box row"); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.add( new tablecomboboxbyrow() ); frame.setsize(200, 200); frame.setlocationbyplatform( true ); frame.setvisible( true ); } public static void main(string[] args) { eventqueue.invokelater(new runnable() { public void run() { createandshowui(); } }); } }
Comments
Post a Comment