无法在子类上调用专用方法

时间:2017-03-21 14:22:52

标签: java swing jtable

我创建了一个扩展JTable类的类。我无法调用public类中未定义的JTable方法。我怎样才能做到这一点? 这是我班级的代码:

public class CustomJTable extends JTable
{
    private int id_mod = -1;
    private ModelloCampiLista mcl = ModelloCampiLista.getInstance();
    private TreeMap<Integer, DefaultCellEditor> tm_cbox = new TreeMap<>();
    private Map<String,ModelloCampi> tm;

    public CustomJTable(MyDefaultTableModel dtm)
    {
        super();
        setCustomModel(dtm);
    }

    public void setCustomModel(MyDefaultTableModel dtm)
    {
        super.setModel(dtm);
        update(dtm);
    }

    private void update(MyDefaultTableModel dtm)
    {
        id_mod = dtm.id_modello;
        tm = dtm.tm;
        composeTm_cbox();
    }

    private void composeTm_cbox()
    {
        TreeMap<Integer, ArrayList<String>> temp = mcl.getCBoxElements(id_mod);

        for (Map.Entry<Integer, ArrayList<String>> entry : temp.entrySet())
        {
            int map_key = entry.getKey();
            ArrayList<String> map_value = entry.getValue();
            String[] temp_jcb_el = new String[map_value.size()];

            for (int i = 0; i < map_value.size(); i++)
                temp_jcb_el[i] = map_value.get(i);

            JComboBox tmp_cbox = new JComboBox(temp_jcb_el);
            DefaultCellEditor temp_dce = new DefaultCellEditor(tmp_cbox);

            tm_cbox.put(map_key, temp_dce);
        }
    }

    @Override
    public TableCellEditor getCellEditor(int row, int column)
    {
        if (column == 1)
        {
            if (tm_cbox.getOrDefault(row, null) == null)
                return super.getCellEditor(row, column);

            return tm_cbox.get(row);
        }

        return super.getCellEditor(row, column);
    } 
}

我想调用名为setCustomModel的公共方法,但我看不到它。

1 个答案:

答案 0 :(得分:1)

您在哪里存储实例?如果您正在做类似

的事情
JTable table = new CustomJTable(model);

然后你要删除变量子类型的规范,在运行时将是CustomJTable但是在编译时变量有JTable类型,因此你不能调用任何专门的方法。 / p>

但我没有看到整个代码和目的,为什么需要使用自定义setCustomModelsetModel已经提供JTable的原因还不够?

正如您所看到的那样,您的设计是真正的耦合,这在OOP中并不是一件好事。