2016-05-02 105 views
0

我有一個隨着用戶輸入數據而增長的表。我期望做的是將表放入某種類型的容器中,並添加一個滾動條,該滾動條在滾動時手動移動容器的視圖。我不想使用JScrollPane,因爲在過去的幾天裏我一直在努力讓它工作。我發現它不適用於空佈局,這似乎是唯一允許我的表正常打印的佈局。因此,我拋出了JScrollPane的想法,而是試圖實現編程滾動條本身的想法,它將視圖轉移到溢出的容器中。到目前爲止,我沒有在Web上發現任何可以改變Java容器視圖的東西。關於如何做到這一點的任何想法?JScrollPane不會將滾動條添加到動態增長表中

UPDATE:

按照建議,我將嘗試使用JScrollPane的滾動。所以新的問題是:爲什麼下面的代碼不工作?

背景:DataTable是我設計的一個類,它擴展了java.awt.Container,它包含一個充滿JLabels的網格。這個類包含addRow和addCol等方法來增加容器的大小來添加單元格,而且這個類還包含用於設置標籤值的方法。

我想要做的是將我的類放置在一個JScrollPane中,它具有可以滾動的靜態寬度和高度,以查看整個表的增長情況。

DataTable table = new DataTable(1,4,100,30); //creates table with 1 row (30px tall) and 4 columns (100px wide each) 
table.setLocation(0, 0); 
JScrollPane scroll = new JScrollPane(table);//scroll pane 
scroll.setLayout(null); 
scroll.setBounds(10, 50, 500, 100); 
scroll.add(table); 
Frame frame = new Frame(); 
frame.add(scroll); 
frame.setLayout(null); 
frame.setSize(600, 500); 
frame.setVisible(true); 
for (int i=0 ; i<20 ; i++) { 
    table.addRow();//add twenty rows to table 
} 

當我運行這段代碼時,沒有滾動條出現。爲什麼?我該如何解決這個問題? (即使我刪除了將JSrollPane的佈局設置爲null的行,代碼仍然不起作用,實際上,根本不顯示錶格)。

+1

'因此,我拋出了JScrollPane的想法,而我試圖實現自己的編程滾動條的想法,它將視圖轉移到溢出的容器中。「不要花時間嘗試重新發明輪子。這種基本的支持已經存在於Swing中。如果某些東西不起作用,那麼問題出在您的代碼上,而不是Swing組件。 Swing旨在與佈局經理一起使用。如果您仍然遇到問題,請修復您的代碼以使用佈局管理器,然後發佈適當的[SSCCE](http://sscce.org/)。 – camickr

+0

編寫代碼時使用適當的變量名稱。 「a,b,c,d ...」毫無意義。你的'SSCCE'在哪裏?您發佈的代碼不是「SSCCE」。你的發佈代碼是如何編譯的。另外'SSCCE'應該是使用佈局管理器的版本。不要使用空佈局! – camickr

回答

0

我一直沒能找到問題,所以我反而找到了一個使用java.awt.ScrollPane的替代解決方案。我對DataTable所做的唯一更改是它現在擴展了java.awt.Panel。

DataTable table = new DataTable(1,4,100,30); //creates table with 1 row (30px tall) and 4 columns (100px wide each) 
//table extends java.awt.Panel and it consists a 2D array of Labels which contain text 
//class has methods for adding rows and cols, and methods for setting values etc. 
table.setLocation(0, 0); 
ScrollPane scroll = new ScrollPane();//scroll pane 
scroll.setBounds(10, 50, 500, 100); 
scroll.add(table); 
Frame frame = new Frame(); 
frame.add(scroll); 
frame.setLayout(null); 
frame.setSize(600, 500); 
frame.setVisible(true); 
for (int i=0 ; i<20 ; i++) { 
    table.addRow();//add twenty rows to table 
}