Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GetTableCellRenderComponent参数:";“价值”;及;“当选”;对于JComboBox_Java_Swing_Tablecellrenderer - Fatal编程技术网

Java GetTableCellRenderComponent参数:";“价值”;及;“当选”;对于JComboBox

Java GetTableCellRenderComponent参数:";“价值”;及;“当选”;对于JComboBox,java,swing,tablecellrenderer,Java,Swing,Tablecellrenderer,我在JTable中有一个JComboBox,正在查看解释参数的GetTableCellRenderComponent文档 table - the JTable that is asking the renderer to draw; can be null value - the value of the cell to be rendered. It is up to the specific renderer to interpret and draw the value. For exam

我在JTable中有一个JComboBox,正在查看解释参数的GetTableCellRenderComponent文档

table - the JTable that is asking the renderer to draw; can be null
value - the value of the cell to be rendered. It is up to the specific renderer to interpret and draw the value. For example, if value is the string "true", it could be rendered as a string or it could be rendered as a check box that is checked. null is a valid value
isSelected - true if the cell is to be rendered with the selection highlighted; otherwise false
hasFocus - if true, render cell appropriately. For example, put a special border on the cell, if the cell can be edited, render in the color used to indicate editing
row - the row index of the cell being drawn. When drawing the header, the value of row is -1
column - the column index of the cell being drawn
我的困惑是“价值”和“选择”。如果要呈现“值”,那么“isSelected”怎么可能是假的?如果为false,为什么会呈现“值”,因为它未被选中?会呈现什么?蒂亚

在camickr的澄清和一些实验后更新

显然,我只是部分了解正在发生的事情,这给我带来了一个问题。选择JComboBox时,“值”的内容是所选项目,而不是JComboBox实例。因此,我不再需要渲染JComboBox的实例。我也没有看到一个“table”方法可以让我获取当前单元格中的组件。如何获取JComboBox实例,以便在该单元格中正确渲染该框?当进行选择时,JComboBox将消失,我得到了案例2、5、6、7的运行时错误,这是有意义的,因为值现在是字符串而不是JComboBox实例。蒂亚

public class TimelineCellRenderer implements TableCellRenderer {

@SuppressWarnings("unchecked")
@Override
public Component getTableCellRendererComponent(JTable table_, Object value_, boolean isSelected_, boolean hasFocus_, int row_,int column_) {

    Component field=null;
    String str="";
    if (value_!=null) {
        str=value_.toString();
    }
    switch (column_) {
        case 0:
        case 3:
        case 4:
        case 8:
            field=new JTextField();
            ((JTextField) field).setText(str);
            break;
        case 1:
            field=new JTextField();
            ((JTextField) field).setText(Double.toString((Double) value_));
            break;
        case 2:
        case 5:
        case 6:
        case 7:
            field=(JComboBox<String>) value_;
            break;
        case 9:
            field=new JTextField();
            ((JTextField) field).setText("Add button");
            break;
        case 10:
            field=new JTextField();
            ((JTextField) field).setText("del button");
            break;
    }
    if (field instanceof JTextField) {
        Font f=field.getFont().deriveFont(Font.PLAIN, (float) 14);
        field.setFont(f);
    }
    return(field);
}

}
公共类TimelineCellRenderer实现TableCellRenderer{
@抑制警告(“未选中”)
@凌驾
公共组件GetTableCellRenderComponent(JTable表、对象值、布尔值、布尔值、布尔值、行、列){
组件字段=空;
字符串str=“”;
如果(值_932;!=null){
str=值_uu0.toString();
}
开关(列){
案例0:
案例3:
案例4:
案例8:
field=新的JTextField();
((JTextField)字段).setText(str);
打破
案例1:
field=新的JTextField();
((JTextField)字段).setText(Double.toString((Double)value));
打破
案例2:
案例5:
案例6:
案例7:
字段=(JComboBox)值;
打破
案例9:
field=新的JTextField();
((JTextField)字段).setText(“添加按钮”);
打破
案例10:
field=新的JTextField();
((JTextField)字段).setText(“删除按钮”);
打破
}
if(JTextField的字段实例){
Font f=field.getFont().deriveFont(Font.PLAIN,(float)14);
字段设置字体(f);
}
返回(字段);
}
}

无论何时单击单元格,所选行都会更改

因此,行中的每个单元格都需要渲染,因为行高亮显示需要更改

在该行中,一次只能选择一个单元格

此外,需要在不高亮显示的情况下重新绘制先前选定行的所有单元格


因此,基本答案是该方法被调用多次,每个单元格调用一次,参数将不同。

我想我不清楚。我说的不是选择一个单元格,而是从该单元格中的JComboBox中进行选择。我看到的“value”的内容是所选的项目。您已经清楚了。我不知道你对我的回答有什么不理解。调用该方法有多种原因,重新绘制编辑的单元格只是其中之一。该方法需要一个通用参数签名。因此,isSelected参数值会根据需要进行更改。因此,当您编辑一个单元格时,yes selected显然总是true,但该方法可以在其他时间调用,此时该单元格将不会被选中。我给你举了一个简单的例子来说明这个过程,这是我不理解的。我不知道除了初始化或选择(单击)一个项目时,会调用渲染器。谢谢。你读过JTable教程吗???您永远不会在TableModel中存储JComboBox。组合框仅用作编辑单元格的编辑器。编辑单元格后,用作编辑器的组件将从表中删除,编辑器中的值将存储到JTable的TableModel中。单元格编辑完成后,无需访问组合框(或任何其他编辑器)。您尝试的解决方案是错误的,因为我们不知道需求,所以无法提供任何帮助。在任何情况下,你都会收到你最初问题的答案,为什么不被接受?我已经收到了,我想这是造成混乱的主要原因。在试图澄清我自己的困惑之后,我查阅了无数的例子,这就像是所有不同的小段落。我在开始时使用了默认的表模型,没有呈现JComboxes。那些细胞只是空白。我最终通过使用上面的代码让它们显示出来。然而,正如我所说,当我点击框并进行选择时,框消失了,因为“值”是一个字符串而不是一个组件。我的要求是我应该认为是常规和简单的。我想从JComboBox中检测一个选中的项目,并知道行和列的编号,设置一个变量。我不接受答案,因为我仍然有一个问题,并更新了OP。我认为如果OP得到了回答,没有人会再看它了。
我最终通过使用上面的代码让它们显示出来。
-您的代码完全错误,看起来与Swing教程中的代码完全不同。阅读JTable API并单击“如何使用表”链接,在这里可以找到使用组合框的工作示例。不需要像上面发布的那样自定义渲染或代码
我不接受答案,因为我仍然有一个问题
-关于“isSelected”值的原始问题已得到回答!!!您当前的问题与原始问题完全无关,不应在同一帖子中提问。请阅读教程。下载工作代码。了解如何使用组合框。如果你对你的“新”要求仍然有问题,那就在一个新的问题中贴一个合适的帖子。在前面的问题中,您被要求发布
MCVE
。几行随机代码不是MCVE。