2012-03-19 130 views
3

这是我第一次使用GUI,所以我不确定是什么导致了问题。我有一份来自我的Uni的作业。该项目旨在为各种目的制定一种“产品管理”计划。除了GUI之外,整个事情都完成了,这就是我不明白为什么JTable不显示列标题的原因。下面的代码(顺便说一句,使用MIGLayout)JTable不显示列标题

package sepm.s2012.e0727422.gui; 

import sepm.s2012.e0727422.service.*; 

import java.awt.*; 
import javax.swing.*; 

import net.miginfocom.swing.MigLayout; 


public class MainFrame { 

    /** Start all services **/ 
// IProductService ps = new ProductService(); 
// IInvoiceService is = new InvoiceService(); 
// IOrderService os = new OrderService(); 

    /** Frame **/ 
    private JFrame frame; 
    private JTabbedPane tab; 

    public static void main(String[] args) { 
     new MainFrame(); 
    } 


    public MainFrame() { 

     frame = new JFrame("Product control and management system"); 
     frame.setVisible(true); 
     frame.setSize(800, 600); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     /** TABBED PANE options and parameters **/ 
     tab = new JTabbedPane(); 
     ImageIcon icon = null; // TODO 
     tab.addTab("Products", icon, tabProducts(), "Add/Update/Delete products"); 
     tab.addTab("Invoices", icon, tabInvoices(), "Overview of invoices"); 
     tab.addTab("Cart", icon, tabCart(), "Order new products"); 
     tab.setSelectedIndex(0); 

     frame.add(tab, BorderLayout.CENTER); 

    }  
    /** 
    * Products Panel tab 
    * @return panel 
    */ 
    public JPanel tabProducts() { 
     JPanel panel = new JPanel(new MigLayout("","20 [] 20", "10 [] 10 [] 10 [] 10")); 

     JLabel label = new JLabel("List of all available products"); 
     JButton add = new JButton("Add product"); 
     JButton update = new JButton("Update product"); 
     // Below is a test table, will be replace by products in DB 
     String[] tableTitle = new String[] {"ID", "Name", "Type", "Price", "In stock"}; 
     String[][] tableData = new String[][] {{"1", "Item 1", "Type 1", "0.00", "0"}, {"2", "Item 2", "Type 2", "0.00", "0"}, 
               {"3", "Item 3", "Type 3", "0.00", "0"}, {"4", "Item 4", "Type 4", "0.00", "0"}}; 
     JTable table = new JTable(tableData, tableTitle); 

     panel.add(label, "wrap, span"); 
     panel.add(table, "wrap, span"); 
     panel.add(add); 
     panel.add(update); 

     return panel; 
    } 

    public JPanel tabInvoices() { 
     JPanel panel = new JPanel(new MigLayout()); 
     return panel; 
    } 

    public JPanel tabCart() { 
     JPanel panel = new JPanel(new MigLayout()); 
     return panel; 
    } 
} 

回答

4

起初你的表添加到一个JScrollPane:

JScrollPane scrollpane = new JScrollPane(table); 

然后滚动面板添加到您的布局:

panel.add(scrollpane, "wrap, span"); 

其次,所有的组件添加到框架并使其可见在您的方法结束时:

//... 
frame.add(tab, BorderLayout.CENTER); 

frame.validate(); 
frame.setVisible(true); 
+0

比你多,这个固定的问题。 – vedran 2012-03-19 11:56:26

8

表添加到JScrollPane

该文档为JTable状态:

..请注意,如果你想使用一个JTable独立视图JScrollPane之外)并且希望显示标题,您可以使用getTableHeader()获取并单独显示。