JTable の 1 つのセルを JComboBox オブジェクトにして、それを使用できるようにしたいと考えています。列全体ではなく、1 つのセルのみである必要があります。テーブルには特定のセルを含めることができますが、常にそうとは限りません。その配置は静的ではありません。私の問題は、使用できる 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");
}
}
}