Я хотел бы сделать одну ячейку в JTable объектом JComboBox и иметь возможность ее использовать. Это должна быть только одна ячейка, а не весь столбец. Таблица может содержать определенную ячейку, но не всегда, ее размещение не статично. Моя проблема заключается в том, чтобы поместить JComboBox в JTable, который можно использовать. Я приложил код, который я смог сделать до сих пор. Таблица содержит JComboBox, но когда я нажимаю на нее, списка нет и включается редактор ячеек. Я хотел бы, чтобы список отображался. Что мне делать или что нужно добавить/изменить в коде, чтобы достичь моей цели?
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;
public class CustomCellRenderer {
JTable table;
TableColumn tcol;
public static void main(String[] args) {
new CustomCellRenderer();
}
public CustomCellRenderer() {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
Object data[][] = { { "Vinod", "Computer", "3" },
{ "Rahul", "History", "2" }, { "Manoj", "Biology", "4" },
{ "Sanjay", "PSD", "5" } };
String col[] = { "Name", "Course", "Year" };
DefaultTableModel model = new DefaultTableModel(data, col);
table = new JTable(model);
tcol = table.getColumnModel().getColumn(0);
tcol.setCellRenderer(new CustomTableCellRenderer());
tcol = table.getColumnModel().getColumn(1);
tcol.setCellRenderer(new CustomTableCellRenderer());
tcol = table.getColumnModel().getColumn(2);
tcol.setCellRenderer(new CustomTableCellRenderer());
JTableHeader header = table.getTableHeader();
JScrollPane pane = new JScrollPane(table);
panel.add(pane);
frame.add(panel);
frame.setSize(500, 150);
frame.setUndecorated(true);
frame.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public class CustomTableCellRenderer extends DefaultTableCellRenderer implements ActionListener {
public Component getTableCellRendererComponent(JTable table,
Object obj, boolean isSelected, boolean hasFocus, int row,
int column) {
Component cell = super.getTableCellRendererComponent(table, obj,
isSelected, hasFocus, row, column);
if (((String) obj).equals("History")) {
JComboBox comboBox = new JComboBox();
comboBox.addItem("History");
comboBox.addItem("English");
comboBox.addItem("Biology");
comboBox.addItem("PE");
comboBox.addItem("None of the above");
comboBox.addActionListener(this);
return comboBox;
}
return cell;
}
public void actionPerformed(ActionEvent e) {
System.out.println("Perform some action");
}
}
}