添加 JPanel 时 JTable 列 header 消失
JTable columns header dissapear when adding JPanel
将我的 JTable(table with columns header) 添加到 JScrollPane ,两者都显示正常...
如果相同的 JTable + 一些 JPanel...都添加到主 JPanel(BorderLayout),然后将这个主 JPanel 添加到 JScrollPane ....table 的列 header 停止在 table 显示时显示 ?!
知道为什么以及如何解决这个问题..
somePanel=new JPanel (new FlowLayout ());
somePanel.setPreferredSize (new Dimension (600,50));
somePanel.setBackground (Color.lightGray);
mainPane=new JPanel (new BorderLayout ());
mainPane.setPreferredSize (new Dimension (600,550));
mainPane.setBackground (Color.lightGray);
mainPane.add (somePanel,BorderLayout.NORTH);
mainPane.add (table,BorderLayout.CENTER);
scrollBar=new JscrollBar();
scrollBar.setVisible (true);
scrollBar.setVisibleAmount (10);
scrollBar.setEnabled (true);
scrollBar.setOrientation (Adjustable.VERTICAL);
scrollPane=new JScrollPane ();
scrollPane.setVerticalScrollBar (scrollBar);
scrollPane.setVerticalScrollBarPolicy
(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setPreferredSize (new Dimension (600,650));
scrollPane.setViewportView (mainPane);
/*the createExamsSchedualTable() is inside inner class in the Jframe
and called by class constructor*/
private void createExamsSchedualTable(){
table=new JTable (new TheTableModel ());
table.setPreferredScrollableViewportSize (new Dimension (600,570));
table.setFillsViewportHeight (true);
table.setAutoResizeMode (JTable.AUTO_RESIZE_ALL_COLUMNS);
table.setAutoCreateRowSorter (true);
table.setSelectionBackground (Color.LIGHT_GRAY);
table.setDragEnabled (true);
table.setGridColor (Color.LIGHT_GRAY);
table.setIntercellSpacing (new Dimension (3,3));
table.setRowSelectionAllowed (true);
table.setColumnSelectionAllowed (true);
table.setCellSelectionEnabled (true);
table.setShowGrid (true);
table.setShowHorizontalLines (true);
table.setVerifyInputWhenFocusTarget (true);
table.setToolTipText ("Exams Scheduals Times Table");
}
/*TheTableModel class extends AbstractTableModel */
still don't know why the header disappear though !!
将 JTable 添加到 JScrollPane 时,JTable 的 JTableHeader 将添加到滚动窗格的 header 列。这是JTable的特殊逻辑。
如果将 JTable 直接添加到 JPanel,则您负责在面板上显示 header。类似于:
JPanel panel = new JPanel( new BorderLayout() );
panel.add(table, BorderLayout.CENTER);
panel.add(table.getTableHeader(), BorderLayout.PAGE_START);
panel.add(anotherPanel, BorderLayout.PAGE_END);
或者您可以自己将 header 添加到 scrollPane>
JPanel panel = new JPanel(...);
panel.add(table, ...);
panel.add(anotherPanel, ...);
JScrollPane scrollPane = new JScrollPane(panel);
scrollPane.setColumnHeaderView(table.getTableHeader());
将我的 JTable(table with columns header) 添加到 JScrollPane ,两者都显示正常...
如果相同的 JTable + 一些 JPanel...都添加到主 JPanel(BorderLayout),然后将这个主 JPanel 添加到 JScrollPane ....table 的列 header 停止在 table 显示时显示 ?!
知道为什么以及如何解决这个问题..
somePanel=new JPanel (new FlowLayout ());
somePanel.setPreferredSize (new Dimension (600,50));
somePanel.setBackground (Color.lightGray);
mainPane=new JPanel (new BorderLayout ());
mainPane.setPreferredSize (new Dimension (600,550));
mainPane.setBackground (Color.lightGray);
mainPane.add (somePanel,BorderLayout.NORTH);
mainPane.add (table,BorderLayout.CENTER);
scrollBar=new JscrollBar();
scrollBar.setVisible (true);
scrollBar.setVisibleAmount (10);
scrollBar.setEnabled (true);
scrollBar.setOrientation (Adjustable.VERTICAL);
scrollPane=new JScrollPane ();
scrollPane.setVerticalScrollBar (scrollBar);
scrollPane.setVerticalScrollBarPolicy
(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setPreferredSize (new Dimension (600,650));
scrollPane.setViewportView (mainPane);
/*the createExamsSchedualTable() is inside inner class in the Jframe
and called by class constructor*/
private void createExamsSchedualTable(){
table=new JTable (new TheTableModel ());
table.setPreferredScrollableViewportSize (new Dimension (600,570));
table.setFillsViewportHeight (true);
table.setAutoResizeMode (JTable.AUTO_RESIZE_ALL_COLUMNS);
table.setAutoCreateRowSorter (true);
table.setSelectionBackground (Color.LIGHT_GRAY);
table.setDragEnabled (true);
table.setGridColor (Color.LIGHT_GRAY);
table.setIntercellSpacing (new Dimension (3,3));
table.setRowSelectionAllowed (true);
table.setColumnSelectionAllowed (true);
table.setCellSelectionEnabled (true);
table.setShowGrid (true);
table.setShowHorizontalLines (true);
table.setVerifyInputWhenFocusTarget (true);
table.setToolTipText ("Exams Scheduals Times Table");
}
/*TheTableModel class extends AbstractTableModel */
still don't know why the header disappear though !!
将 JTable 添加到 JScrollPane 时,JTable 的 JTableHeader 将添加到滚动窗格的 header 列。这是JTable的特殊逻辑。
如果将 JTable 直接添加到 JPanel,则您负责在面板上显示 header。类似于:
JPanel panel = new JPanel( new BorderLayout() );
panel.add(table, BorderLayout.CENTER);
panel.add(table.getTableHeader(), BorderLayout.PAGE_START);
panel.add(anotherPanel, BorderLayout.PAGE_END);
或者您可以自己将 header 添加到 scrollPane>
JPanel panel = new JPanel(...);
panel.add(table, ...);
panel.add(anotherPanel, ...);
JScrollPane scrollPane = new JScrollPane(panel);
scrollPane.setColumnHeaderView(table.getTableHeader());