Java 如何用基本表填充JScrollPane

Java 如何用基本表填充JScrollPane,java,swing,Java,Swing,我的计划是创建一个“基本”表模板,每当播放器创建一个新的播放列表时,该模板将填充JScrollPane Netbeans GUI编辑器创建如下代码: 私有组件(){ 我有我的模板: 公共类BasicTableGUI扩展了JTable{ JTable table; DefaultTableModel musicTableModel; public BasicTableGUI() { String[] columns = {"Artist", "Title", "Album", "Tra

我的计划是创建一个“基本”表模板,每当播放器创建一个新的播放列表时,该模板将填充JScrollPane

Netbeans GUI编辑器创建如下代码: 私有组件(){

我有我的模板: 公共类BasicTableGUI扩展了JTable{

JTable table;
DefaultTableModel musicTableModel;

public BasicTableGUI() {

    String[] columns = {"Artist", "Title", "Album", "Track Number", "Length"};
    musicTableModel = new DefaultTableModel(columns, 15);
    table = new javax.swing.JTable();

    table.setModel(musicTableModel);

    if (table.isEnabled()) {
        System.out.println("yess");
    } else {
        System.out.println("nsssss");
    }

    table.setTransferHandler(new MusicTableHandler(musicTableModel));
    table.setDragEnabled(true);
    table.setDropMode(javax.swing.DropMode.ON_OR_INSERT_ROWS);
    table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    table.setFillsViewportHeight(true);
    table.setVisible(true);

}
}
我尝试从netbeans的GUI代码中调用它,如下所示:

...


 playlists.setModel(new javax.swing.AbstractListModel() {
    String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
    public int getSize() { return strings.length; }
    public Object getElementAt(int i) { return strings[i]; }
});
playlistsScrollPane.setViewportView(playlists);


musicFileTableScrollPane.setViewportView(newBasicGUI());
我得到这个错误:

Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: 
Uncompilable source code Erroneous sym type: 
javax.swing.JScrollPane.setViewportView

什么是调用此表“模板”、BasicGUI的正确方法?我是否正确创建了BasicGUI类?

您不应该将JTable子类。您应该创建一个扩展AbstractTableModel的类,并实现数据调用方法。然后改为:

jTable1.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
        {null, null, null, null},
        {null, null, null, null},
        {null, null, null, null},
        {null, null, null, null}
    },
    new String [] {
        "Title 1", "Title 2", "Title 3", "Title 4"
    }
));
你会的

jTable1.setModel(new MyBasicTableModel());
然后,MyBasicTableModel类将保存表中显示的所有数据。您可能需要添加额外的方法,以便您的程序能够根据需要更新数据。您还必须在获得数据更新时通知侦听器,以便直观地更新表


您可以在

中找到更多信息。让我们从主要问题开始。运行代码时,代码未正确编译。接下来,您将创建两个JTables,这并没有真正的帮助。就我个人而言,我会放弃使用表单编辑器,因为它会妨碍您的工作,并在一步中配置表。感谢您指出这两个表。这就是只是复制和粘贴时出错。我不认为每次用户更改播放列表时都需要重新创建表,您只需更改表中的数据即可model@MadProgrammer-我也对此提出了质疑。我想这会使GUI对不同的表实例(播放列表)更具响应性在内存中,而不是更改模型。对我来说,似乎用信息重新加载表会导致打嗝或暂停。再说一次-这是我的第一个swing/GUI项目,因此,我不是从一个非常有见识的角度来看的。这样看……无论如何,你都必须重新绘制屏幕。
JTable
已经优化为绘制(合理地)很快,一般来说,它会在容器层次结构中造成较少的破坏,然后切换物理表。此外,除非我们讨论了成千上万行,否则我怀疑您是否会注意到差异……我不会说“从不”,但您应该有很好的理由这样做,但在这种情况下,可以使用工厂方法将JTable的实例配置为所需状态…只是说;)我想您永远不应该说从不。:)
jTable1.setModel(new MyBasicTableModel());