2013-07-02 11 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가 반환하는 다소 임의의 크기이다 : 오버라이드하고 적당한 값을 돌려 준다. rowCount에 따라 다르다 – kleopatra

+0

'Venue'? 'QueueItem'? '리포터? – trashgod

답변

3

완전한 예제가 없다면,보고있는 내용을 확신하기가 어렵습니다. 주어진 숫자가 setPreferredSize() 일 때, JTableScrollable을 구현하고 자신이 원하는 크기로 계산할 수 있습니다. 불행히도, 임의의 Dimension 계산 된 문제가 원인 일 수 있습니다. getPreferredScrollableViewportSize()을 재정 의하여 getRowHeight()의 배수를 반환하려면 example에 대한 유용한 대안이 될 수 있습니다.

+0

예를 완성했으며 setPreferredSize도 제거했습니다 ... –

+0

스크린 샷을 추가했습니다. –

+1

+1 네일 스팟을 치기위한 +1 - getPrefScrollable _is_ a nuisance, btw : JXTable은 정확하게 그 rowCount 상대 계산을합니다. 나 자신에게주의하십시오 : 아직 최적은 아닙니다 - 실제로 최대 행까지 고려해야합니다) – kleopatra