Я создаю JTable
в Java и перебираю список с именем methodtraces2
, для столбцов 10, 11, 12 и 13 я бы хотел, чтобы каждая ячейка была сделана из JComboBox
.Например, каждая ячейка в столбце 10 должна содержать поле со списком, а каждая строка в поле со списком должна содержать одну запись в списке methodtrace.getCallersList()
, каждая ячейка в столбце 10 будет отличаться в зависимости от содержимого methodtrace.getCallersList()
, котороеотличается для каждой итерации methodtraces2
.
Я беру все значения для каждого поля со списком и сохраняю их в массиве String items1
, который представляет содержимое поля со списком для каждой строки таблицы (каждая итерация methodtraces2
).
items1
должен заполнять comboBox1
на каждой итерации methodtraces2
items2
должен заполняться comboBox2
items3
должен заполняться comboBox3
items4
должно заполниться comboBox4
Мне нужно сделать то же самое для столбцов 11, 12 и 13.
items2
содержит значения поля со списком для столбца 11 items3
содержит значения поля со списком для столбца 12 items4
содержит значения поля со списком для каждой строкив столбце 14.
Метод getCellEditor
отвечает за назначение полей со списком для соответствующих столбцов, прямо сейчас, у меня есть один и тот же ввод содержимого поля со списком для всех строк в столбце 10.
public class TableComboBoxByRow extends JFrame
{
List<TableCellEditor> editors = new ArrayList<TableCellEditor>(4);
static List<MethodTrace2> methodtraces2= new ArrayList<MethodTrace2>();
public TableComboBoxByRow() throws SQLException
{
DatabaseReading2 db = new DatabaseReading2();
DatabaseReading2.MakePredictions();
methodtraces2= db.getMethodtraces2();
int j=0;
String[] items1 = new String [methodtraces2.size()];
String[] items2 = new String [methodtraces2.size()];
String[] items3 = new String [methodtraces2.size()];
String[] items4 = new String [methodtraces2.size()];
Object[][] data = new Object[methodtraces2.size()][10000];
// Create the editors to be used for each row
for(MethodTrace2 methodtrace: methodtraces2) {
data[j][0]= methodtrace.MethodRepresentation.getMethodid();
data[j][1]= methodtrace.MethodRepresentation.getMethodname();
data[j][2]= methodtrace.Requirement.getID();
data[j][3]= methodtrace.Requirement.getRequirementName();
data[j][4]= methodtrace.ClassRepresentation.classid;
data[j][5]= methodtrace.ClassRepresentation.classname;
data[j][6]= methodtrace.gold;
data[j][7]= methodtrace.subject;
data[j][8]= methodtrace.goldpredictionCaller;
data[j][9]= methodtrace.goldpredictionCallee;
int i=0;
items1 = new String[methodtrace.getCallersList().size()];
for(Method2Representation caller: methodtrace.getCallersList()) {
items1[i]=caller.toString();
System.out.println(caller.toString());
i++;
}
// data[j][10]=items1;
int k=0;
items2 = new String[ methodtrace.getCalleesList().size()];
for(Method2Representation caller: methodtrace.getCalleesList()) {
items2[k]=caller.toString();
System.out.println(caller.toString());
k++;
}
int r=0;
items3 = new String[methodtrace.getCallersListExecuted().size()];
for(Method2Representation caller: methodtrace.getCallersListExecuted()) {
items3[r]=caller.toString();
System.out.println(caller.toString());
r++;
}
int z=0;
items4 = new String[10000];
for(Method2Representation caller: methodtrace.getCalleesListExecuted()) {
items4[z]=caller.toString();
System.out.println(caller.toString());
z++;
}
JComboBox comboBox1 = new JComboBox( items1 );
DefaultCellEditor dce1 = new DefaultCellEditor( comboBox1 );
editors.add( dce1 );
JComboBox comboBox2 = new JComboBox( items2 );
DefaultCellEditor dce2 = new DefaultCellEditor( comboBox2 );
editors.add( dce2 );
JComboBox comboBox3 = new JComboBox( items3 );
DefaultCellEditor dce3 = new DefaultCellEditor( comboBox3 );
editors.add( dce3 );
JComboBox comboBox4 = new JComboBox( items4);
DefaultCellEditor dce4 = new DefaultCellEditor( comboBox4 );
editors.add( dce4 );
j++;
}
String[] columnNames = {"MethodID","MethodName", "RequirementID", "RequirementName", "ClassID", "ClassName", "Gold", "Subject", "GoldPredictionCaller", "GoldPredictionCallee",
"Callers", "CallersExecuted", "Callees", "CalleesExecuted"};
DefaultTableModel model = new DefaultTableModel(data, columnNames);
JTable table = new JTable(model)
{
// Determine editor to be used by row
public TableCellEditor getCellEditor(int row, int column)
{
int modelColumn = convertColumnIndexToModel( column );
if (modelColumn == 10 && row < methodtraces2.size())
return editors.get(0);
else
return super.getCellEditor(row, column);
}
};
table.getColumnModel().getColumn(10).setWidth(10000);
table.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
JScrollPane scrollPane = new JScrollPane( table );
getContentPane().add( scrollPane );
}
class ComboBoxRenderer extends JComboBox implements TableCellRenderer
{
public ComboBoxRenderer()
{
setBorder(new EmptyBorder(0, 0, 0, 0));
}
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column)
{
removeAllItems();
addItem( value );
return this;
}
}
public static void main(String[] args) throws SQLException
{
TableComboBoxByRow frame = new TableComboBoxByRow();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setVisible(true);
}
}