Возможно ли создать экземпляр пользовательского средства визуализации ячеек и поместить в него разные значения для каждого столбца в зависимости от аргументов, данных ему?
Custom Cell Renderer
Например:
У меня есть этот рендерер (MyCustomCellRenderer myRen = new MyCustomCellRenderer
), и для каждого столбца я поставил другой аргумент, чтобы показать что-то difeerent в ComboBox
:
MyCustomCellRenderer myRen = new MyCustomCellRenderer
for (int i = 0; i < table.nbColumns; i++) {
myRen.setArg(myArg); //denpending on this argument I fill the combo
myJTable.getColumnModel().getColumn(i).setCellRenderer(myRen);
}
Как я могу сделать это?
Edit:
Похоже есть missunderstanding, у меня есть список аргументов, и я написал код, указанный выше в качестве примера.
Мой вопрос: Что следует писать в классе MyCustomCellRenderer
, чтобы каждый раз, когда рендеринг менялся, каждый столбец?
Мой визуализатор класс:
public class MyCustomCellRenderer extends JPanel{
private static final long serialVersionUID = 1L;
private JPanel topPanel;
private JTextField hs = new JTextField();
private Activity aObj = new Activity();
@SuppressWarnings({ "unchecked", "rawtypes" })
private JComboBox<ComboItem> activityCombo = new JComboBox(aObj.getListActivitiesForComboBox());
private JComboBox<ComboItem> chantier = new JComboBox<ComboItem>();
private List<Project> listProjectsForChef;
private List<Date> datePointage = new ArrayList<Date>();
private Date columnDate;
public MyCustomCellRenderer(boolean enabled, int idChef) {
this.setLayout(new BorderLayout());
if (enabled) {
Project p = new Project();
p.setChef(idChef);
listProjectsForChef = p.getListProjectsForSelectedChef();
topPanel = new JPanel();
Color color = new Color(128, 128, 128);
chantier.setBorder(BorderFactory.createLineBorder(Color.WHITE));
chantier.setPreferredSize(new Dimension(this.getWidth(), 30));
Services.setSideBorderColor(chantier, "TOP", color);
this.add(chantier, BorderLayout.SOUTH);
topPanel.setLayout(new GridLayout());
hs.setBorder(BorderFactory.createLineBorder(Color.WHITE));
hs.setHorizontalAlignment(JTextField.CENTER);
Services.setSideBorderColor(hs, "RIGHT", color);
hs.setPreferredSize(new Dimension(topPanel.getWidth(), topPanel.getHeight()));
topPanel.add(hs);
topPanel.add(activityCombo);
this.add(topPanel, BorderLayout.CENTER);
}
}
//The function that will take the argument
public void setDatePointage(Date d){
this.datePointage.add(d);
this.columnDate = d;
fillProjectCombobox();//--fill the combo based on the given argument
}
public void fillProjectCombobox() {
this.chantier.removeAllItems();
int nbIde = listProjectsForChef.size();
for (int i = 0; i < nbIde; i++) {
String key = Integer.toString(listProjectsForChef.get(i).getId());
String value = listProjectsForChef.get(i).getDesignation();
java.sql.Date dateEndMappingChiefProject = listProjectsForChef.get(i).getDateFin();
if(dateEndMappingChiefProject != null){
int compare = dateEndMappingChiefProject.compareTo(this.columnDate);
if(compare == 1){//---dateEndMappingChiefProject > this.columnDate
this.chantier.addItem(new ComboItem(key, value));// ---on ajout les
}
}else{
this.chantier.addItem(new ComboItem(key, value));// ---on ajout les
}
}
}
}
Должны ли мы угадать, что остальная часть кода выглядит? –
@MuratK. Проблема в том, что мой код очень длинный, на самом деле я использую 3 класса для создания этого средства визуализации, и рендеринг правильно принимает аргументы, но он не отображает его в combobox. Фактически рендеринг принимает последнее значение rendere и применить его ко всем столбцам. например, если комбо последнего дисплея colmun [1, 2, 3] все столбцы принимают одинаковые значения! – SlimenTN
Да, потому что вы перебираете все ячейки с тем же 'myArg' –