2010-03-30 68 views
2

下面是代碼:爲什麼setPreferredSize不會改變按鈕的大小?

import javax.swing.*; 
import java.awt.event.*; 
import java.awt.*; 

public class TestGrid { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame("Colored Trails"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel mainPanel = new JPanel(); 
     mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); 

     JPanel panel = new JPanel(); 
     panel.setLayout(new GridLayout(4, 9)); 
     panel.setMaximumSize(new Dimension(9*30-20,4*30)); 

     JButton btn; 
     for (int i=1; i<=4; i++) { 
      for (int j=1; j<=4; j++) { 
       btn = new JButton(); 
       btn.setPreferredSize(new Dimension(30, 30)); 
       panel.add(btn); 
      } 

      btn = new JButton(); 
      btn.setPreferredSize(new Dimension(30, 10)); 
      panel.add(btn); 

      for (int j=1; j<=4; j++) { 
       btn = new JButton(); 
       btn.setPreferredSize(new Dimension(30, 30)); 
       panel.add(btn); 
      } 

     } 
     mainPanel.add(panel); 
     frame.add(mainPanel); 

     frame.setSize(450,950); 
     frame.setVisible(true); 
    } 
} 

我想有按鈕的表4行9列。中間欄應該比其他欄更窄。我試過Dimension(30, 10)Dimension(30, 10)都沒有影響中間列的寬度。爲什麼?

+2

閱讀教程。您已經多次提供了Swing教程的鏈接。這在「如何使用網格佈局」教程中有明確的說明。用這些問題退出論壇,直到你做了一些基本的閱讀。現在是最近幾天與佈局經理有關的7個問題。令我難以置信的是,人們繼續回答這些問題,特別是當你不接受答案時。 – camickr 2010-03-30 16:09:42

+1

@camickr,沒有人強迫你回答我的問題。有些人有問題,有些人已經準備好回答這個問題。這些人可以找到共同的語言和合作的方式。如果你不明白它爲什麼起作用,那就不要參與其中。別打擾別人。 – Roman 2010-04-01 13:40:50

+1

我瞭解它的工作方式。你做了一些研究,當你遇到問題時,你會發問詢問。我們不在這裏爲你做閱讀。如果您付出努力,我們將努力。 – camickr 2010-04-01 15:07:04

回答

7

佈局管理員可以自由地忽略首選大小。具體而言,GridLayout將始終使網格中的每個單元格的大小完全相同(出於這個原因,這是一個相當無用的佈局管理器)。

您必須使用不同的佈局管理器,例如嵌套的BoxLayoutGroupLayout

1

GridLayout非常不靈活,因爲每個單元都具有相同的大小,通常表示添加到網格中的任何對象的最大高度和寬度設置。

如果行和/或列需要具有不同的大小,則應使用GridBagLayout。

-1

setPreferredSize將不會更改按鈕的大小,直到通過使用尺寸設置尺寸。

例子: -

Dimension dim = new Dimension(20,20), then use setPerferredSize(dim).

+0

在這種情況下,設置Dimension將無濟於事。正在使用GridLayout,它並未完全兌現setPreferredSize。根據最大寬度和高度,GridLayout將所有高度和寬度設置爲相同。另外請注意,最大高度和寬度不一定來自同一個組件。 – Michael 2012-04-02 17:25:51

0

我發現這個方法的版本,適合完美的解決方案:

.addComponent(<>,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing中.GroupLayout.DEFAULT_SIZE,<>)

相關問題