Java ComboBoxRenderer无法转换为TableCellRenderer
我尝试创建一个组合框并将其添加到我的表列中。我用这个。当我尝试执行Java ComboBoxRenderer无法转换为TableCellRenderer,java,swing,combobox,jtable,renderer,Java,Swing,Combobox,Jtable,Renderer,我尝试创建一个组合框并将其添加到我的表列中。我用这个。当我尝试执行col5.setCellRenderer(cmbRender)时它抛出: “ComboBoxRenderer无法转换为TableCellRenderer” ComboxRenderer class ComboBoxRenderer extends JLabel implements ListCellRenderer { private Font uhOhFont
col5.setCellRenderer(cmbRender)时代码>它抛出:
“ComboBoxRenderer无法转换为TableCellRenderer”
ComboxRenderer
class ComboBoxRenderer extends JLabel
implements ListCellRenderer {
private Font uhOhFont;
public ComboBoxRenderer() {
setOpaque(true);
setHorizontalAlignment(CENTER);
setVerticalAlignment(CENTER);
}
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
int selectedIndex = ((Integer)value).intValue();
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
String[] petStrings = {"Bird", "Cat", "Dog", "Rabbit", "Pig"};
String pet = petStrings[selectedIndex];
setUhOhText(pet + " (no image available)",
list.getFont());
return this;
}
protected void setUhOhText(String uhOhText, Font normalFont) {
if (uhOhFont == null) { //lazily create this font
uhOhFont = normalFont.deriveFont(Font.ITALIC);
}
setFont(uhOhFont);
setText(uhOhText);
}
}
我试着这样打电话
ComboBoxRenderer cmbRender = new ComboBoxRenderer();
TableColumn col5 = jTable1.getColumnModel().getColumn(4);
col5.setCellRenderer(cmbRender);// give me error here
我想在我的表列中创建一个在petString中赋值的值。请给我一些建议
这是我为TextBox所做的
TextRenderer2 renderer2 = new TextRenderer2();
TableColumn col5 = jTable1.getColumnModel().getColumn(4);
MyTableCellEditor editor = new MyTableCellEditor();
col5.setCellEditor(editor);
col5.setCellRenderer(renderer2);
col5.setPreferredWidth(100);
文本渲染器
class TextRenderer2 extends JLabel implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
JPanel jp_panel = new JPanel();
JTextPane jta_text = new JTextPane();
JScrollPane jsp_scroll = null;
String valStr = value.toString();
jta_text.setText(valStr);
jp_panel.setLayout(new BorderLayout());
jsp_scroll = new JScrollPane(jta_text);
jp_panel.add(jsp_scroll, BorderLayout.CENTER);
return jp_panel;
}
}
将implements ListCellRenderer更改为implements TableCellRenderer
class ComboBoxRenderer extends JComboBox implements TableCellRenderer {
public ComboBoxRenderer(Object[] items) {
super(items);
}
private static final long serialVersionUID = 1L;
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (isSelected) {
setForeground(table.getSelectionForeground());
super.setBackground(table.getSelectionBackground());
} else {
setForeground(table.getForeground());
setBackground(table.getBackground());
}
// Select the current value
setSelectedItem(value);
return this;
}
}
请问目标是什么,只是在表格单元格中显示JComboBox作为渲染器,取消JComboBox的创建…@mKorbel我没明白。我想在我的表格列中创建一个下拉列表。为了进行测试,我只使用petString在下拉列表中显示。我希望您理解渲染器的概念,渲染器只是绘画,其他什么都没有,ListCellRenderer是用于JList的,JComboBox是用于JTable的。是否有XxxTableCellRenderer/prepareRenderer,再次说明其目标是什么,问题我想在我的表列==TableCellEditor或not@mKorbel使用渲染器进行显示,并使用TableCellEditor保存值。它适用于我的文本框和复选框。使用工作的文本框渲染器编辑了我的答案。为什么您会感到惊讶-您的ComboBoxRenderer实现列表单元格渲染器,而表需要表单元格渲染器:-)您可以同时执行这两项操作:ComboBoxRenderer实现列表单元格渲染器,TableCellRenderer
:-)