未理解已定义构造函数的Java语法

未理解已定义构造函数的Java语法,java,swing,constructor,Java,Swing,Constructor,我正在实现一种类型的表。为此,我使用了一个AbstractTableModel,但我不知道我的代码在做什么(这就是为什么我得到一个代码片段来完成他的工作,但显然我想理解)。你可以看到代码 public class TablePanel extends JPanel { private JTable table; public TablePanel() { setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

我正在实现一种类型的表。为此,我使用了一个
AbstractTableModel
,但我不知道我的代码在做什么(这就是为什么我得到一个代码片段来完成他的工作,但显然我想理解)。你可以看到代码

public class TablePanel extends JPanel
{
    private JTable table;
    public TablePanel()
    {
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 
        table = new JTable(new MyTableModel());
        table.setFillsViewportHeight(true);     
        table.setPreferredScrollableViewportSize(new Dimension(500, 100));
        JScrollPane jps = new JScrollPane(table);
        add(jps);
        add(new JScrollPane(table));
        table.setCellSelectionEnabled(true);
    }
    private class MyTableModel extends AbstractTableModel {
        private String[] columns = {"","Monday","Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
        private String[][] data = {{"8:30 - 9:30","","","","","",""},
            {"9:30 - 10:30","","","","","",""},
            {"10:30 - 11:30","","","","","",""},
            {"11:30 - 12:30","","","","","",""},
            {"12:30 - 13:30","","","","","",""},
            {"13:30 - 14:30","","","","","",""},
            {"14:30 - 15:30","","","","","",""},
            {"15:30 - 16:30","","","","","",""},
            {"16:30 - 17:30","","","","","",""}};

        public int getColumnCount() {
            return columns.length;
        }

        public int getRowCount() {
            return data.length;
        }

        public String getColumnName(int col) {
            return columns[col];
        }

        public Object getValueAt(int row, int col) {
            return data[row][col];
        }
        public Object myMethod (){
            //do something
        }
    }
}
那么,它是什么意思
table=newjtable(newmytablemodel())

我认为
table
将是一个
MyTableModel
实例,但事实并非如此。事实上,如果我将table传递给另一个外部类,这个类将不会看到在
MyTableModel

主体中定义的方法
myMethod
,JTable构造函数接受实现
TableModel
接口的类的任何对象


将帮助您了解更多信息。

JTable构造函数接受实现
TableModel
接口的类的任何对象


将帮助您了解更多信息。

它的预期行为是其他类看不到函数myMethod,因为他们“认为”您的MyTableModel只是一个AbstractTableModel(事实上并非如此) 您放入MyTableModel的代码和其他所有内容都被正确调用,但您无法看到函数myMethod 这是因为您使用的是OOP语言

所以不,你错了。 您正在创建MyTableModel的实例,因此,如果调用

您应该在这里阅读这篇文章,它将进一步解释OOP部分:

说得快一点

如果您需要访问myMethod函数,只需按如下方式进行转换: //创建MyTableInstance(这是可能的,因为AbstractTableModel是父对象,MyTableModel是子对象) AbstractTableModel atmTestVariable=新的MyTableModel()

希望我能帮上忙


Ohhh请将MyTabeModel类的定义移到一个单独的文件中://

它的预期行为是其他类看不到函数myMethod,因为他们“认为”MyTableModel只是一个AbstractTableModel(事实上并非如此) 您放入MyTableModel的代码和其他所有内容都被正确调用,但您无法看到函数myMethod 这是因为您使用的是OOP语言

所以不,你错了。 您正在创建MyTableModel的实例,因此,如果调用

您应该在这里阅读这篇文章,它将进一步解释OOP部分:

说得快一点

如果您需要访问myMethod函数,只需按如下方式进行转换: //创建MyTableInstance(这是可能的,因为AbstractTableModel是父对象,MyTableModel是子对象) AbstractTableModel atmTestVariable=新的MyTableModel()

希望我能帮上忙


哦,请将MyTabeModel类的定义移到一个单独的文件中:/

a
MyTableModel
是一个
TableModel
,但a
TableModel
不一定是一个
MyTableModel

正如您所知,您的表的模型是
MyTableModel
的一个实例,它具有所需的
myMethod()
,您可以使用强制转换:

JTable table = new JTable(new MyTableModel());
MyTableModel model = (MyTableModel) table.getModel();
创建和使用模型的参照可能更容易:

MyTableModel model = new MyTableModel();
JTable table = new JTable(model);

不要忽略包含
setValueAt()
的实现,如图所示。

A
MyTableModel
TableModel
,但是
TableModel
不一定是
MyTableModel

正如您所知,您的表的模型是
MyTableModel
的一个实例,它具有所需的
myMethod()
,您可以使用强制转换:

JTable table = new JTable(new MyTableModel());
MyTableModel model = (MyTableModel) table.getModel();
创建和使用模型的参照可能更容易:

MyTableModel model = new MyTableModel();
JTable table = new JTable(model);
不要忽略包含
setValueAt()
的实现,如图所示。

@Bernheart,否则没有对XxxTableModel的任何定义,就有set DefaultTableModel….@Bernheart,否则没有对XxxTableModel的任何定义,就有set DefaultTableModel。。。。