当我想看到100行(可滚动)时,JTable只显示10行

时间:2013-05-23 10:31:12

标签: java swing jtable jbutton netbeans-7

我不确定提出这个问题的标题,所以希望没有人太困惑......

我有一个按钮,当点击它时,会添加每个" Player"的属性。从Player对象的ArrayList到JTable的对象。目前,有500名玩家"在我的ArrayList中,我想要显示100行(因为似乎有100行的限制 - 如果我知道如何为下一行/前10行做按钮,我就这样做)。当转到JTabbedPane中的相应选项卡并单击按钮时,我只看到10行数据 - 我希望看到100行数据并向下滚动以查看其余数据。我已将JTable放在JScrolledPane中。

这是我按钮的actionListener:

中的代码
private void getAllPlayersBtnActionPerformed(java.awt.event.ActionEvent evt) {                                                 

            for(int i = 0; i < players.size(); i++)
            {
                playersDataTable.setValueAt(players.get(i).getPlayerID(), i, 0);
                playersDataTable.setValueAt(players.get(i).getPlayerName(), i, 1);
                playersDataTable.setValueAt(players.get(i).getCountryName(), i, 2);
                playersDataTable.setValueAt(players.get(i).getCareerSpan(), i, 3);
                playersDataTable.setValueAt(players.get(i).getMatchesPlayed(), i, 4);
                playersDataTable.setValueAt(players.get(i).getInningsPlayed(), i, 5);
                playersDataTable.setValueAt(players.get(i).getBallsBowled(), i, 6);
                playersDataTable.setValueAt(players.get(i).getRunsConceded(), i, 7);
                playersDataTable.setValueAt(players.get(i).getWicketsTaken(), i, 8);
                playersDataTable.setValueAt(players.get(i).getBowlingAverage(), i, 9);
                playersDataTable.setValueAt(players.get(i).getEconomyRate(), i, 10);
                playersDataTable.setValueAt(players.get(i).getStrikeRate(), i, 11);
                playersDataTable.setValueAt(players.get(i).getFiveWicketsInnings(), i, 12);

            }
    } 

编辑:以下是一些可能有用的额外代码。大部分代码都是由NetBeans自动创建的 - 我试图进行一些自定义编辑。

我的scrolledPane的代码

tableScrollPane = new javax.swing.JScrollPane();

tableScrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

tableScrollPane.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));

// Code of sub-components and layout - not shown here

// Code adding the component to the parent container - not shown here

JTable的代码:

playersDataTable = new javax.swing.JTable();

playersDataTable.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153, 204, 255), 2));

playersDataTable.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
        //NOTE: There were 100 of these, but deleted some to truncate this code
        {null, null, null, null, null, null, null, null, null, null, null, null, null},
        {null, null, null, null, null, null, null, null, null, null, null, null, null},
        {null, null, null, null, null, null, null, null, null, null, null, null, null},
        {null, null, null, null, null, null, null, null, null, null, null, null, null},
        {null, null, null, null, null, null, null, null, null, null, null, null, null},
        {null, null, null, null, null, null, null, null, null, null, null, null, null},
        {null, null, null, null, null, null, null, null, null, null, null, null, null},
        {null, null, null, null, null, null, null, null, null, null, null, null, null},
        {null, null, null, null, null, null, null, null, null, null, null, null, null},
        {null, null, null, null, null, null, null, null, null, null, null, null, null},
        {null, null, null, null, null, null, null, null, null, null, null, null, null}

    },
    new String [] {
        "ID", "Player Name", "Country", "Career Span", "Matches Played", "Innings Played", "Balls Bowled", "Runs Conceded", "Wickets Taken", "Bowling Average", "Economy Rate", "Strike Rate", "5 Wickets/Innings"
    }
) {
    Class[] types = new Class [] {
        java.lang.Integer.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Double.class, java.lang.Double.class, java.lang.Double.class, java.lang.Integer.class
    };
    boolean[] canEdit = new boolean [] {
        false, false, false, false, false, false, false, false, false, false, false, false, false
    };

    public Class getColumnClass(int columnIndex) {
        return types [columnIndex];
    }

    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return canEdit [columnIndex];
    }
});

playersDataTable.setPreferredSize(new java.awt.Dimension(700, 160));

playersDataTable.getTableHeader().setResizingAllowed(false);
playersDataTable.getTableHeader().setReorderingAllowed(false);

playersDataTable.setUpdateSelectionOnSort(false);

tableScrollPane.setViewportView(playersDataTable);

playersDataTable.getColumnModel().getColumn(0).setResizable(false);
playersDataTable.getColumnModel().getColumn(0).setPreferredWidth(20);
playersDataTable.getColumnModel().getColumn(1).setResizable(false);
playersDataTable.getColumnModel().getColumn(2).setResizable(false);
playersDataTable.getColumnModel().getColumn(3).setResizable(false);
playersDataTable.getColumnModel().getColumn(3).setPreferredWidth(50);
playersDataTable.getColumnModel().getColumn(4).setResizable(false);
playersDataTable.getColumnModel().getColumn(4).setPreferredWidth(60);
playersDataTable.getColumnModel().getColumn(5).setResizable(false);
playersDataTable.getColumnModel().getColumn(5).setPreferredWidth(60);
playersDataTable.getColumnModel().getColumn(6).setResizable(false);
playersDataTable.getColumnModel().getColumn(6).setPreferredWidth(50);
playersDataTable.getColumnModel().getColumn(7).setResizable(false);
playersDataTable.getColumnModel().getColumn(7).setPreferredWidth(60);
playersDataTable.getColumnModel().getColumn(8).setResizable(false);
playersDataTable.getColumnModel().getColumn(8).setPreferredWidth(50);
playersDataTable.getColumnModel().getColumn(9).setResizable(false);
playersDataTable.getColumnModel().getColumn(9).setPreferredWidth(55);
playersDataTable.getColumnModel().getColumn(10).setResizable(false);
playersDataTable.getColumnModel().getColumn(10).setPreferredWidth(50);
playersDataTable.getColumnModel().getColumn(11).setResizable(false);
playersDataTable.getColumnModel().getColumn(11).setPreferredWidth(35);
playersDataTable.getColumnModel().getColumn(12).setResizable(false);

按钮名为getAllPlayersBtn,players.size()等于500.

我在StackOverFlow上看到了类似的问题,但似乎无法按照我想要的方式进行调整。我正在使用NetBeans GUI Builder为程序构建GUI - 因为我是这个GUI构建器的新手,我不确定在这里显示每个人的代码(除了之前发布的代码片段)。如果需要更多代码,请告诉我究竟需要什么。

我在https://github.com/rattfieldnz/Java_Projects/tree/master/PCricketStats的GitHub项目中为任何想要运行它的人提供了一些帮助。该应用程序的主要类是&#34; AppInterfac.java&#34;,并且JTable位于&#34;统计涉及多个玩家&#34;标签


这很可能与这个特殊问题无关,但我想我会在这里简单提一下......理想情况下我想要一个&#34; Next&#34;显示10个行的按钮,以及&#34; Previous&#34;我会看到很多不同的方法,我很困惑,所以我希望有人看看我的具体案例,并指导我如何实现这些按钮。

1 个答案:

答案 0 :(得分:1)

您应该通过模型添加行,而不是通过表格设置单元格值。

你有两个选择。您可以创建一个新模型,向其添加所有新行,并在完成后将其应用于表。

您可以从表中获取模型,清除它并添加所有新行。

这取决于基础表模型