JTable不显示列标题
问题描述:
这是我第一次使用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;
}
}
答
起初你的表添加到一个JScrollPane:
JScrollPane scrollpane = new JScrollPane(table);
然后滚动面板添加到您的布局:
panel.add(scrollpane, "wrap, span");
其次,所有的组件添加到框架并使其可见在您的方法结束时:
//...
frame.add(tab, BorderLayout.CENTER);
frame.validate();
frame.setVisible(true);
答
表添加到JScrollPane
该文档为JTable
状态:
..请注意,如果你想使用一个
JTable
独立视图(JScrollPane
之外)并且希望显示标题,您可以使用getTableHeader()
获取并单独显示。
答
对于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?
比你多,这个固定的问题。 – vedran 2012-03-19 11:56:26