2012-03-07 2 views
0

Я пытаюсь добавить компонент jtable в jPanel, но я не могу его увидеть. Что я делаю не так?.Добавление компонента в jPanel java

table gui = new table(data,colum); 
mainPanel.add(gui.table); 

class table extends JFrame 
{ 
    public JTable table; 

    public table(Vector data, Vector colum) 
    { 
     setLayout(new FlowLayout()); 
     table = new JTable(data,colum); 
     table.setPreferredScrollableViewportSize(new Dimension(900,10)); 
     table.setFillsViewportHeight(true); 
     JScrollPane scrollPane = new JScrollPane(table); 
     add(scrollPane); 
    } 

} 
+0

Пожалуйста, включают [sscce] (http://www.sscce.org). – Moonbeam

+0

Это сбивает с толку. Почему вы добавляете материал в JFrame, а затем добавляете его в другой JPanel? Какова мотивация этого? Вы знаете, что вы можете визуализировать компонент только один раз, а не дважды. Если вы хотите, чтобы один и тот же JTable отображался более одного раза, вам нужно создать несколько JTables и предоставить им общую модель таблицы. –

+0

Я довольно новичок в java и все еще пытаюсь понять вещи, однако, я думаю, вы имеете в виду строку 'add (scrollPane);' Я думал, что это для прокрутки jtable ?. Затем я инициализирую класс таблицы и добавлю его компонент таблицы в главный jpanel. Где я иду не так? –

ответ

1

Расширение JFrame кажется странным; вы не используете какие-либо возможности контейнера верхнего уровня. Вот пример, который расширяет JPanel, с main(), который бросает панель в JFrame.

--Edited принять существующий JPanel

public class TablePanel 
{ 
    public static void addTableToPanel(JPanel jPanel, Vector rowData, Vector columnNames) 
    { 
    JTable jTable = new JTable(rowData, columnNames); 
    jTable.setFillsViewportHeight(true); 

    JScrollPane jScrollPane = new JScrollPane(jTable); 
    jScrollPane.setPreferredSize(new Dimension(300, 50)); 

    jPanel.add(jScrollPane); 
    } 

    public static void main(String[] args) throws Exception 
    { 
    SwingUtilities.invokeAndWait(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
     Vector cols = new Vector(); 
     Vector rows = new Vector(); 
     Vector row1 = new Vector(); 

     cols.add("A"); 
     cols.add("B"); 
     cols.add("C"); 
     row1.add("1"); 
     row1.add("2"); 
     row1.add("3"); 
     rows.add(row1); 
     rows.add(row1.clone()); 
     rows.add(row1.clone()); 
     rows.add(row1.clone()); 

     JFrame frame = new JFrame("TableTest"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel jPanel = new JPanel(); 
     jPanel.setLayout(new BorderLayout(0, 0)); 
     TablePanel.addTableToPanel(jPanel, rows, cols); 

     frame.getContentPane().add(jPanel); 
     frame.pack(); 
     frame.setVisible(true); 
     } 
    }); 
    } 
} 
+0

Как вы добавляете таблицу, которую вы создали, в существующую Jpanel. Предположим, что эта строка mainPanel = new javax.swing.JPanel(); , Вы хотите добавить свою таблицу в mainPanel, как вы это делаете? (потому что это проблема, которая у меня есть, ее не отображаются). Ваш пример отображает таблицу в новом окне –

+0

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

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