[英]Put a JComboBox to JTable and make getting an element from list instead of editing the cell
我想使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");
}
}
}
您必須實現TableCellEditor
而不是TableCellRenderer,並使用JTable.setCellEditor(TableCellEditor)進行設置 。
看這個例子 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.