2016-04-16 123 views
0

JButtons具有默認大小,我無法更改它。我試着用setSize,它什麼都不做。當我點擊一些JButton時,圖片將被設置,JButtons將獲得圖片的大小。我想設置一個JButton的大小是一樣的JButton的大小相同,當我點擊它(的JButton與圖片)JButton默認大小不能在GridBagLayout中更改

btn=new JButton[9]; 
    j=0; 

    for (i = 0; i <btn.length; i++) { 
     btn[i] = new JButton(""); 
     btn[i].addActionListener(new ActionListener(){ 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       if(j%2==0){ 
        ((JButton) e.getSource()).setIcon(new ImageIcon("resources/X.png")); 
       }else{ 
        ((JButton) e.getSource()).setIcon(new ImageIcon("resources/O.png")); 
       } 
       ((JButton) e.getSource()).setEnabled(false); 
       j++; 
      } 
     }); 

    } 

GridBagConstraints gbc=new GridBagConstraints(); 

gbc.gridx=0; 
gbc.gridy=0; 
p2.add(btn[0],gbc); 

gbc.gridx=1; 
gbc.gridy=0; 
p2.add(btn[1],gbc); 

gbc.gridx=2; 
gbc.gridy=0; 
p2.add(btn[2],gbc); 

......... 

enter image description here enter image description here

+1

您可以:使用空白圖像;使用'fill'和'weightx/y'約束和/或'ipadx/y'約束;使用'GridLayout' – MadProgrammer

+0

setPreferredSize工作! – GlacialMan

+0

@GlacialMan'setPreferredSize'是一個壞主意,代表了一個習慣,它會導致你無法結束問題,學會在沒有它的情況下生活。 [我應該避免在Java Swing中使用set(Preferred | Maximum | Minimum)Size方法嗎?](http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumsize-methods -in-java-swi) – MadProgrammer

回答

3

大概是最簡單,最可靠的解決方案是使用一個與其他圖像大小相同的空白圖像作爲按鈕的初始圖像

很少有佈局管理器允許您直接建議給定組件的大小,實際上,其目的是允許組件告訴佈局經理想要什麼,然後讓佈局馬急於弄清楚它是否適合它。

例如...

GridBagLayout

public class TestPane extends JPanel { 

    public TestPane() { 
     setLayout(new GridBagLayout()); 
     BufferedImage img = new BufferedImage(32, 32, BufferedImage.TYPE_INT_ARGB); 
     Graphics2D g2d = img.createGraphics(); 
     g2d.setBackground(new Color(255, 255, 255, 0)); 
     g2d.clearRect(0, 0, 32, 32); 
     g2d.dispose(); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     for (int row = 0; row < 3; row++) { 
      gbc.gridy = row; 
      for (int col = 0; col < 3; col++) { 
       gbc.gridx = col; 
       add(new JButton(new ImageIcon(img)), gbc); 
      } 
     } 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(200, 200); 
    } 

} 

在這個例子中,我創建了自己的空白圖像,你可以做同樣的,但它只是作爲易於裝載空白圖像時,概念是一樣的

+0

是的,我想過但後來我會檢查圖片是否一樣,所以我會得到總是回答圖片是相同的 – GlacialMan

+0

setPreferredSize work :) – GlacialMan

+0

@GlacialMan'setPreferredSize'是其中之一那些「看起來」像他們解決你的問題的陰險功能,但是從長遠來看,這種簡單的繼續讓你的生活變得更加困難,學會不去生活。你不應該檢查圖像狀態,而應該有一個遊戲的虛擬模型,它包含實際的遊戲狀態以及哪些按鈕只是一個可視化表示 – MadProgrammer