2012-05-21 2 views
0

My JTable не появляется. Я не знаю, почему. возможно ты можешь помочь мне. У меня есть класс окон, который имеет правую панель, а на правой панели должна отображаться таблица с данными модели. Я использовал фиктивные данные, чтобы начать с таких, как месяц и дни.Почему мой JTable не появляется?

Вот правой панели Class

import model.*; 


import java.awt.*; 
import java.awt.event.*; 
//import java.text.*; 
import javax.swing.*; 


public class RightPanel extends JPanel implements View 
{ 
    private TablePanel songsnartists = new TablePanel(); 
    Shop shop; 

    public RightPanel(Shop ourShop) 
    { 
     shop = ourShop; 
     setup(); 
     build(); 
     setVisible(true); 
    } 

    private void setup() 
    { 
     setPreferredSize(new Dimension(300, 300)); 
     setLayout(new GridLayout(3,2)); 
     setBorder(BorderFactory.createLineBorder(Color.blue)); 
    } 

    private void build() 
    { 
     add(songsnartists); 
    } 

    public void update() 
    {} 
} 

/* достаточно просто до сих пор просто пытается добавить панель таблицы в правой панели */

Вот класс TablePanel, что я создал. Он наследует JTable и использует закрытый класс MyTableModel, который наследует AbstractTableModel, чтобы я мог сделать таблицу неизменяемой.

import javax.swing.*; 
import javax.swing.table.*; 


public class TablePanel extends JTable 
{ 
    //private int ROWS = 3; 
    //private int COLUMNS = 2; 
    private final String [][] data = {{"Jan", "31"}, {"Feb","28"},{"Mar","31"}}; 
    private final String[] headers = {"Month", "Days"}; 
    JTable table; 


    public TablePanel() 
    { 
     table = new JTable(new MyTableModel(data, headers)); 
     JTableHeader header = table.getTableHeader(); 
     //header.setBackground(Color.blue); 
     setVisible(true); 
    } 

    private class MyTableModel extends AbstractTableModel 
    { 
     private String[] columnNames = {"Month", "Days"}; 
     private String[][] data = {{"Jan", "31"}, {"Feb","28"},{"Mar","31"}}; 

     public MyTableModel(String [][] data, String [] header) 
     { 
      int rows, cols, rowCounter, colCounter; 

      rows = getRowCount(); 
      cols = getColumnCount(); 

      for (rowCounter=0; rowCounter < rows; rowCounter++) 
       { 
        for (colCounter=0; colCounter < cols; colCounter++) 
         { 
          setValueAt(data[rowCounter][colCounter],rowCounter,colCounter); 
         } 
       }   
     } 


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

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

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

     public Object getValueAt(int row, int col) 
     { 
      return data[row][col]; 
     } 

     public Class getColumnClass(int c) 
     { 
      return getValueAt(0, c).getClass(); 
     } 

     public boolean isCellEditable(int row, int col) 
     { 
      return false; 
     } 
    } 
} 

Как вы можете видеть, абстрактные методы переопределяются в частном классе. Может ли кто-нибудь помочь мне показать мне, почему мой JTable не появляется?

+1

Итак ... где вы хотите, чтобы JTable появился? – Tharwen

+0

Вы добавляете экземпляр RightPanel на свой фрейм? Как сейчас, вы добавляете TablePanel в RightPanel, но вы не добавляете RightPanel в любом месте –

ответ

4
  • читать учебник How to Use Tables

  • поставил JTable на JScrollPane

  • не забудьте поставить JScrollPane к JPanel с помощью надлежащего LayoutManager, я не могу видеть, что там вы добавили JTable до JPanel, не уверены, что новый GridLayout(3,2) может быть надлежащим LayoutManager для JTable view

+0

Я исправил эту проблему, но это было много лет назад. Я забыл, как я это сделал. Если я помню, я отправлю ответ здесь. –

+0

Извините, я не могу предоставить дополнительную информацию. Это было много лет назад, и я забыл. Я не могу точно запомнить, как я исправил ситуацию. Мне лениво. –

Смежные вопросы