2009-05-02 22 views
-1

有一天這段代碼正在工作。我改變了一些東西,重新運行它,現在它不能按預期工作。很明顯,我改變了一些行爲,但我已經回去並恢復了所有這些變化,但仍然無效。忽略這一點信息(開始),爲什麼這段代碼不在Jpanel內放置一個15x15的JLabel網格?JPanel翻轉出來,FlowLayout不按預期工作

gameBoard.setLayout(new FlowLayout()); 

for (int i = 0; i < 15; i++) 
{ 
    for (int j = 0; j < 15; j++) 
    { 
     JLabel tile = new JLabel("");      
    tile.setHorizontalAlignment(SwingConstants.CENTER); 
     tile.setPreferredSize(new Dimension(27, 27)); 
     tile.setBorder(new EtchedBorder()); 
     tile.setEnabled(false); 

     gameBoard.add(tile); 
    } 
} 

gameBoard是一個通過NetBeans的GUI生成器定義的JPanel。它有一個首選大小,最大大小(與首選相同)。水平/垂直可調整大小的選項被禁用,但是當這段代碼運行時,每一個按鈕在一行中水平延伸而不會中斷。

如果我理解正確,FlowLayout應該在元素到達其包含元素的末尾時包裝元素。這是在今天之前發生的,我真的不知道爲什麼這種行爲停止了?

回答

-1

我想通了。顯然我必須在代碼本身中設置preferredSize。只需在Netbeans屬性窗口中設置它是不夠的。奇怪。

5

使用GridLayout會好很多。

GridLayout gridLayout = new GridLayout(15, 15); 

由於使用了新的外觀和感覺,不同的字體或某些Java VM升級,流佈局可能已更改。不推薦爲此用途定義流佈局,因爲您依賴於可能因虛擬機或外觀而異的底層大小。

+0

我不想要替代品,而是組件永遠不會包裝的原因。 – 2009-05-02 17:53:16

+3

不客氣。 – Pool 2009-05-03 01:16:20

+0

我不明白這個答案可以如何排名?它不回答這個問題,提供了一個備用的解決方案和可疑的指導! – Jeach 2010-08-03 04:07:18

0

我發現很成功&控制使用TableLayout並將其推薦給任何人。您可以使用特定數量的像素定義行&行,或者可以對每列和/或行使用TableLayout.PREFERRED。非常好的&靈活的佈局。我們到處使用它。

3

爲了教導男人如何釣魚:

版本控制系統是偉大的。即使你的系統正在頻繁地備份你的源代碼。

一個有用的調試技術是拿走東西,直到它工作。設置邊框會導致代碼中斷。換個角度來說,你可以寫一個簡單的程序來證明問題。