2013-08-22 121 views
1

我正在使用JDBC。 我的班級有一個帶有JTabbedPane的JFrame,用我的不同方法顯示帶有UI的JPanel。 在這個面板上,我想在JTable中顯示一個結果集,並附加一列按鈕。 這是所有目前正在工作,當我顯示它在一個新的JFrame,但不是當我嘗試顯示它在現有的。有人可以解釋爲什麼。爲什麼我的JTable會顯示在新的JFrame上,但不會顯示在我現有的JPanel上?

JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); 
    contentPane.add(tabbedPane, BorderLayout.CENTER); 

JPanel panel = new JPanel(); 
    tabbedPane.addTab("Main", null, panel, null); 
    panel.setLayout(null); 


JTable table = new JTable(model); 

    DisplayButtonColumn testWithButtons1 = new DisplayButtonColumn(table, 
      displayHandler.getColCount()); 
    DisplayButtonColumn testWithButtons2 = new DisplayButtonColumn(table, 
      displayHandler.getColCount() + 1); 

    panel.add(new JScrollPane(table)); 

//  JFrame f = new JFrame(); 
//  f.setSize(1000, 500); 
//  f.getContentPane().add(new JScrollPane(table)); 
//  f.setVisible(true); 
+3

面板添加到框架的位置在哪裏? – kiheru

+1

沒有足夠的信息 - 請顯示演示問題的SSCCE – kleopatra

回答

1
panel.setLayout(null); 

的問題是null佈局。 不要那樣做。 Swing旨在與佈局管理者一起使用,而不是這樣做會幾乎毫無例外地導致問題。使用絕對佈局將需要您手動管理組件的界限,而您並未這​​麼做。如果您需要別的東西比默認FlowLayout,只是建立一個滿足你的需求之一:

panel.setLayout(new BorderLayout()); 

(這將是也可以加入到JTabbedPane沒有幫手面板,但我想你想在標籤多個組件)。

+0

謝謝您正在爲BorderLayout和FlowLayout工作,但不是以我希望JTable不使用完整JPanel大小的方式將它擠入中心面板和只使用約1/3的空間可用 任何想法如何糾正這 –

+0

@Dáire這很奇怪。將一個組件放置在BorderLayout的中心位置(默認)應該將其擴展到所有可用空間。擺脫任何'setSize()'調用,記得在設置它可見之前調用'frame.pack()'。你也可能想調用'table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);'。 – kiheru

+0

謝謝我修好了。 Eclipse自動生成一行代碼,這就是造成問題的原因再次感謝。 –