2013-07-02 43 views
1

下面是提供我正在尋找的結果的方式,但不幸的是,當顯示時,每個頁面上的表格之間存在很大差距。這是因爲我只能在每個選項卡的屏幕上放置其中的兩個(每個表格只有兩行)。JTables之間的差距很大

private void display() { 
    JFrame f = new JFrame("Test"); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.add(new JLabel("Test")); 
    f.pack(); 
    f.setLocationRelativeTo(null); 
    f.setVisible(true); 
} 

class ResultsPanel extends JPanel implements ActionListener { 

    private ArrayList<Venue> venueList; 
    private Timer timer; 
    QueueItem[] queue; 
    Reporter reporter; 
    private JPanel resultsPane1; 
    private JPanel resultsPane2; 
    private JTable[] table1; 
    private JTable[] table2; 
    private int totalItems; 
    public String[] page1ColumnNames = { 
     "Name", 
     "Wins", 
     "Losses", 
     "Draws", 
     "Win %", 
     "Avg Turns"}; 
    public String[] page2ColumnNames = { 
     "Name", 
     "H%Total", 
     "H%inRange", 
     "KO/F rcvd", 
     "KO/F Infl", 
     "HChances", 
     "HitsTotal", 
     "Wounds Inflicted", 
     "Wounds Received"}; 
    public String[][] page1Data = new String[2][6]; 
    public String[][] page2Data = new String[2][9]; 

    public void initResults() { 

     timer = new Timer(500, this); 
     timer.start(); 

    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     Object src = e.getSource(); 

     try { 
      Thread.sleep(1); 
     } catch (InterruptedException d) { 
      System.err.println("Caught : InterruptedException" + d.getMessage()); 
     } 

     repaint(); 
    } 

    public ResultsPanel(QueueItem[] queueItems) { 
     super(); 
     totalItems = 0; 
     queue = queueItems; 


     for (QueueItem a : queue) { 
      if (a != null) { 
       totalItems++; 
      } 
     } 

     JTabbedPane tabbedPane = new JTabbedPane(); 

     resultsPane1 = new JPanel(); 
     resultsPane2 = new JPanel(); 
     resultsPane1.setLayout(new BoxLayout(resultsPane1, BoxLayout.PAGE_AXIS)); 
     resultsPane2.setLayout(new BoxLayout(resultsPane2, BoxLayout.PAGE_AXIS)); 
     table1 = new JTable[totalItems]; 
     table2 = new JTable[totalItems]; 
     for (int b = 0; b < totalItems; b++) { 
      reporter = queue[b].reporter; 
      generateData(); 
      table1[b] = new JTable(page1Data, page1ColumnNames); 
      table2[b] = new JTable(page2Data, page2ColumnNames); 
      resultsPane1.add(new JScrollPane(table1[b])); 
      resultsPane2.add(new JScrollPane(table2[b])); 
     } 



     JScrollPane scrollPane1 = new JScrollPane(resultsPane1); 
     JScrollPane scrollPane2 = new JScrollPane(resultsPane2); 
     tabbedPane.addTab("Win/Loss", scrollPane1); 
     tabbedPane.addTab("Overall", scrollPane2); 
     add(tabbedPane); 

    } 

    public void generateData() { 
     double temp = 0; 
     double avgTurns; 
     double total; 

     for (Integer a : reporter.numberOfTurns) { 
      temp = temp + a; 
     } 
     avgTurns = 1.0 * temp/reporter.numberOfTurns.size(); 

     page1Data[0][0] = reporter.glad1.name; 
     page1Data[0][1] = "" + reporter.gladTotalWins1; 
     page1Data[0][2] = "" + reporter.gladTotalLosses1; 
     page1Data[0][3] = "" + reporter.gladTotalDraws1; 
     temp = (int) ((reporter.gladTotalWins1 * 100.0)/(reporter.gladTotalWins1 + reporter.gladTotalLosses1 + reporter.gladTotalDraws1)); 
     page1Data[0][4] = "" + temp + "%"; 
     page1Data[0][5] = "" + avgTurns; 
     page1Data[1][0] = reporter.glad2.name; 
     page1Data[1][1] = "" + reporter.gladTotalWins2; 
     page1Data[1][2] = "" + reporter.gladTotalLosses2; 
     page1Data[0][3] = "" + reporter.gladTotalDraws2; 
     temp = (int) ((reporter.gladTotalWins2 * 100.0)/(reporter.gladTotalWins2 + reporter.gladTotalLosses2 + reporter.gladTotalDraws2)); 
     page1Data[1][4] = "" + temp + "%"; 
     page1Data[1][5] = "" + avgTurns; 

     page2Data[0][0] = reporter.glad1.name; 

     total = 0; 
     for (double a : reporter.hitChancePercentOut1) { 
      total = total + a; 
     } 
     temp = 1.0 * total/reporter.hitChancePercentOut1.size(); 
     page2Data[0][1] = "" + temp; 

     total = 0; 
     for (double a : reporter.hitChancePercentIn1) { 
      total = total + a; 
     } 
     temp = 1.0 * total/reporter.hitChancePercentIn1.size(); 
     page2Data[0][2] = "" + temp; 



     page2Data[1][0] = reporter.glad2.name; 

     total = 0; 
     for (double a : reporter.hitChancePercentOut2) { 
      total = total + a; 
     } 
     temp = 1.0 * total/reporter.hitChancePercentOut2.size(); 
     page2Data[1][1] = "" + temp; 

     total = 0; 
     for (double a : reporter.hitChancePercentIn2) { 
      total = total + a; 
     } 
     temp = 1.0 * total/reporter.hitChancePercentIn2.size(); 
     page2Data[1][2] = "" + temp; 



     int deadCount2 = 0; 
     int KOCount2 = 0; 
     for (String a : reporter.endStatus2) { 
      if (a.equals("DEAD")) { 
       deadCount2++; 
      } else if (a.equals("KO")) { 
       KOCount2++; 
      } 

     } 
     int deadCount1 = 0; 
     int KOCount1 = 0; 
     for (String a : reporter.endStatus1) { 
      if (a.equals("DEAD")) { 
       deadCount1++; 
      } else if (a.equals("KO")) { 
       KOCount1++; 
      } 

     } 
     page2Data[0][3] = "" + KOCount1 + "/" + deadCount1; 
     page2Data[1][3] = "" + KOCount2 + "/" + deadCount2; 
     page2Data[0][4] = "" + KOCount2 + "/" + deadCount2; 
     page2Data[1][4] = "" + KOCount1 + "/" + deadCount1; 

     total = 0; 
     for (Integer a : reporter.hitChances1) { 
      total = total + a; 
     } 
     page2Data[0][5] = "" + total; 
     total = 0; 
     for (Integer a : reporter.hitTotals1) { 
      total = total + a; 
     } 
     page2Data[0][6] = "" + total; 
     total = 0; 
     for (Integer a : reporter.woundsInflicted1) { 
      total = total + a; 
     } 
     page2Data[0][7] = "" + total; 
     total = 0; 
     for (Integer a : reporter.woundsReceived1) { 
      total = total + a; 
     } 
     page2Data[0][8] = "" + total; 
     total = 0; 

     total = 0; 
     for (Integer a : reporter.hitChances2) { 
      total = total + a; 
     } 
     page2Data[1][5] = "" + total; 
     total = 0; 
     for (Integer a : reporter.hitTotals2) { 
      total = total + a; 
     } 
     page2Data[1][6] = "" + total; 
     total = 0; 
     for (Integer a : reporter.woundsInflicted2) { 
      total = total + a; 
     } 
     page2Data[1][7] = "" + total; 
     total = 0; 
     for (Integer a : reporter.woundsReceived2) { 
      total = total + a; 
     } 
     page2Data[1][8] = "" + total; 
     total = 0; 

    } 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2 = (Graphics2D) g; 
    } 
} 

我該如何解決這個問題?謝謝

編輯:編輯爲每個請求添加完整的代碼...大部分與這裏發生的事情無關。還刪除了setPreferredSize,但仍然是相同的結果。

編輯2:

enter image description here

僅供參考,在空白點 「繪製」 是無關。

+0

你應該顯示一個SSCCE(不是很多代碼,甚至你評估爲不相關的代碼;-)無論如何,@trashgod是獨一無二的,它是JTable.getPreferredScrollableViewportSize返回的相當隨意的大小:override並讓它返回一些合理的值取決於rowCount – kleopatra

+0

'場地'? 'QueueItem'? 'Reporter'? – trashgod

回答

3

如果沒有完整的示例,很難確定您看到的是什麼。鑑於應避免setPreferredSize(),請注意JTable執行Scrollable並可以計算它自己的首選大小。不幸的是,計算出的任意Dimension可能會導致問題。覆蓋getPreferredScrollableViewportSize()返回getRowHeight()的倍數,對於example,可能是一個有用的選擇。

+0

完成了這個例子,同時刪除了setPreferredSize ... –

+0

也添加了截圖。 –

+1

+1用於擊中指甲斑點 - getPrefScrollable _is_令人討厭,btw:JXTable完成那個rowCount相對計算。請注意我自己:還沒有達到最佳 - 應該允許最多考慮最大實際行數) – kleopatra