2012-03-19 3 views
3

Это мой первый опыт работы с графическим интерфейсом, поэтому я не совсем уверен, что вызывает проблему. У меня есть задание от моего 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); 

затем добавьте ScrollPane в макете:

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

Во-вторых, добавить все компоненты к раме и сделать его видимым в конце вашего метода:

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

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

, чем вы, это устранило проблему. – vedran

8

Добавить таблицу в JScrollPane

Документы для JTable состояния:

.. Обратите внимание, что если вы хотите использовать JTable в автономный вид (за пределами JScrollPane) и хотите, чтобы заголовок отображался, вы можете получить его с помощью getTableHeader() и отобразить его отдельно.

0

Для MigLayout я использую это:

JPanel panel = new JPanel(new MigLayout("wrap 1, gapy 0")); 
table = CreateParametersTable(); 
panel.add(table.getTableHeader(), "width 100%"); 
panel.add(table, "width 100%"); 

Для удаления вертикальных пробелов читать эту How to remove vertical gap between two cells in MigLayout?

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