好的,我有一个表格设置,在其中我向特定单元格添加了一个JComboBox,就像他们在这里的示例中所做的那样,但是由于某种原因,在选择该单元格之前,组合框不会显示。如果我选择了该单元格,组合框会打开它的列表供我选择。无论我是否更改选择,如果我单击表中的另一个单元格,它都会显示从组合框中选择的项目的文本,就好像它是根据需要显示在表中的简单字符串一样。
我的问题是:我如何让它在JComboBox中显示选择的值,而不必首先选择单元格?
编辑:我忘记提到的一件事是;而不是像他们一样在手边之前声明DefaultTableModel数据
,而是稍后使用model.addRow()将项目添加到DTM;
您可以尝试创建自己的渲染器,如本例所示。
public void example(){
TableColumn tmpColum =table.getColumnModel().getColumn(1);
String[] DATA = { "Data 1", "Data 2", "Data 3", "Data 4" };
JComboBox comboBox = new JComboBox(DATA);
DefaultCellEditor defaultCellEditor=new DefaultCellEditor(comboBox);
tmpColum.setCellEditor(defaultCellEditor);
tmpColum.setCellRenderer(new CheckBoxCellRenderer(comboBox));
table.repaint();
}
/**
Custom class for adding elements in the JComboBox.
*/
class CheckBoxCellRenderer implements TableCellRenderer {
JComboBox combo;
public CheckBoxCellRenderer(JComboBox comboBox) {
this.combo = new JComboBox();
for (int i=0; i<comboBox.getItemCount(); i++){
combo.addItem(comboBox.getItemAt(i));
}
}
public Component getTableCellRendererComponent(JTable jtable,
Object value,
boolean isSelected,
boolean hasFocus,
int row, int column) {
combo.setSelectedItem(value);
return combo;
}
}
或者您可以像本例中一样自定义默认渲染器。
final JComboBox combo = new JComboBox(items);
TableColumn col = table.getColumnModel().getColumn(ITEM_COL);
col.setCellRenderer(new DefaultTableCellRenderer(){
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JLabel label = (JLabel) super.getTableCellRendererComponent(table,
value, isSelected, hasFocus, row, column);
label.setIcon(UIManager.getIcon("Table.descendingSortIcon"));
return label;
}
});
第一个示例使单元格在被单击后看起来像JComboBox。第二个示例向JComboCox添加一个箭头图标,表明JComboBox是可点击的。我用了第二个例子,结果可以在这里看到。
这是正常的行为。表格使用渲染器和编辑器。单元格的默认渲染器只是一个JLabel,因此您只能看到文本。当您单击单元格时,编辑器会被调用,因此您会看到组合框。
如果您希望单元格看起来像一个组合框,即使它没有被编辑,那么您需要为该列创建一个组合框渲染器。
有关更多信息,请阅读Swing教程中关于使用定制渲染器的部分。
问题内容: 我这里有两个div: 有没有办法在这两个div之间分隔空间? 问题答案: 您可以使用属性: HTML: CSS: 还有其他选择吗? 好吧 ,不是真的。 为什么? 属性不适用于元素。 属性不会在单元格的边缘之间创建空间。 属性破坏了能够与其父元素一样高的元素的预期行为。
问题内容: 我正在尝试与fieldset配合使用,但缩放比例不正确。如果我改成,同样的事情也起作用。 我尝试使用Safari和Firefox。 我想念什么吗? 问题答案: 基本上,字段集的默认呈现实际上无法在CSS中表示。结果,浏览器必须以非CSS术语来实现它,这会干扰CSS在该元素上的应用。 几乎所有无法使用纯CSS重新创建的元素都会出现此类问题。
我已经建立了一个显示,一个tabpanel。在这个阶段不显示图表。当我点击一个按钮时,我会建立一个新的图表并将其添加到面板中。但什么也没发生。我必须点击面板才能最终显示图表。 因此,我在包含ChartPanel的TabPanel上添加了一个repaint(),但是没有效果。我是不是漏掉了什么?
问题内容: 在我当前的swing项目中,我有一个JList显示所有活动套接字的窗口,每个单元都有一个JButton关闭该套接字的窗口。但是JButton单元格中的不可点击:不会触发监听器。 我将代码修改为最少,如下所示。 该列表看起来不错,但其中的按钮不可单击。我是错了还是JList不支持JButton被解雇? 问题答案: 尽管您无法获得与普通按钮单击相同的视觉效果,但以下示例似乎可行。也许某个绘
我们刚刚开始实施NatTable,我们非常高兴看到性能的提高。然而,我们在实现特定功能时遇到了困难。 我们想要的是在单元格中有可点击的文本,然后它将引用我们选择并进入视图的表中的一行。基本上,类似于: 通过单击。
问题内容: 我正在尝试创建一个表格,其中每个单元格具有背景颜色,并且它们之间具有空白。但我似乎在执行此操作时遇到了麻烦。 我尝试设置边距,但似乎没有效果。 如果我对填充执行相同的操作,则可以,但是在单元格之间没有间距。 有人可以帮我吗? 问题答案: 使用元素上的属性设置单元格之间的间距。 确保设置为(否则每个单元格之间将有一个单独的边框,而不是每个单元格之间可能会有间隔的单独边框)。