2014-03-01 45 views
0

这是我现在有:如何正确设置JButton的大小与图像?

enter image description here

这就是我想要的形象是这样的:

enter image description here

我有两个java文件,一个扩展的JFrame,并与部分Jpanel看起来基本上是

ShinyButtons panel = new ShinyButtons(); 

panel.setLocation(10, 10); 

getContentPane().add(panel); 

另一个扩展JPanel和JButtons import javax.swing。*;

public class ShinyButtons extends JPanel{ 
public static byte RED = 0; 
public static byte ORANGE = 1; 
public static byte YELLOW = 2; 
public static byte GREEN = 3; 
public static byte BLUE = 4; 
public static byte LIGHT_GRAY = 5; 
public static byte DARK_GRAY = 6; 

public static byte ROWS = 8; 

private byte[][] buttonTable; 

public ShinyButtons() { 
    buttonTable = new byte[ROWS][ROWS]; 
    resetButtons(); 
    setBorder(BorderFactory.createEmptyBorder()); 
    setSize(552,552); 

    ImageIcon[] icons = {new ImageIcon("RedButton.png"), new ImageIcon("OrangeButton.png"), new ImageIcon("YellowButton.png"), 
       new ImageIcon("GreenButton.png"), new ImageIcon("BlueButton.png"), new ImageIcon("LightGrayButton.png"), 
       new ImageIcon("DarkGrayButton.png")}; 


    for (int row=0; row<8; row++){ 
     for (int col=0; col<8; col++){ 
      JButton buttons = new JButton(); 
      buttons.setSize(69,69); 
      buttons.setIcon(icons[(byte)(Math.random()*7)]);     
      add(buttons); 
      buttons.setLocation(row*69, col*69); 
      buttons.setBorder(BorderFactory.createEmptyBorder()); 
     } 
    } 
} 

private void resetButtons() { 
    for (int r=0; r<ROWS; r++) 
     for (int c=0; c<ROWS; c++) 
      buttonTable[r][c] = (byte)(Math.random()*7); 
} 

public byte getButton(int r, int c) { return buttonTable[r][c]; } 
} 

回答

-2

最简单的方法是这样的: “?如何正确设置一个JButton的大小与图像”

button.setSize(imageIcon.getIconWidth, imageIcon.getIconHeight); 
2

不要设置大小在所有使用布局管理器。请参阅Laying out Components Within a Container以了解不同的布局管理器。最明显的一个是GridLayout,它会将您的组件布局在由您定义的大小的网格中。如果你看看下面的方法,你会看到我使用一个GridLayout 8行8列。该方法采用动态网格大小。我通过了8。你所要做的就是把所有图像/标签贴到面板上。无需指定位置/大小。 GridLayout将照顾你。

private JPanel createPanel(ImageIcon[] icons, int gridSize) { 
    Random random = new Random(); 
    JPanel panel = new JPanel(new GridLayout(gridSize, gridSize)); 
    for (int i = 0; i < gridSize * gridSize; i++) { 
     int index = random.nextInt(icons.length); 
     JLabel label = new JLabel(icons[index]); 
     label.setBorder(new LineBorder(Color.GRAY, 2)); 
     panel.add(label); 
    } 
    return panel; 
} 

enter image description here

全码

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.FlowLayout; 
import java.awt.GridLayout; 
import java.util.Random; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 
import javax.swing.border.LineBorder; 

public class CircleImages { 

    public CircleImages() { 
     ImageIcon[] icons = createImageIcons(); 
     JPanel iconPanel = createPanel(icons, 8); 

     JPanel bottomLeftPanel = new JPanel(new FlowLayout(FlowLayout.LEADING)); 
     bottomLeftPanel.add(new JLabel("Score: ")); 
     bottomLeftPanel.add(new JTextField(10)); 

     JPanel bottomRightPanel = new JPanel(new FlowLayout(FlowLayout.TRAILING)); 
     bottomRightPanel.add(new JButton("New Game")); 
     bottomRightPanel.add(new JButton("Quit")); 

     JPanel bottomPanel = new JPanel(new GridLayout(1, 2)); 
     bottomPanel.add(bottomLeftPanel); 
     bottomPanel.add(bottomRightPanel); 

     JFrame frame = new JFrame(); 
     frame.add(iconPanel); 
     frame.add(bottomPanel, BorderLayout.PAGE_END); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    private JPanel createPanel(ImageIcon[] icons, int gridSize) { 
     Random random = new Random(); 
     JPanel panel = new JPanel(new GridLayout(gridSize, gridSize)); 
     for (int i = 0; i < gridSize * gridSize; i++) { 
      int index = random.nextInt(icons.length); 
      JLabel label = new JLabel(icons[index]); 
      label.setBorder(new LineBorder(Color.GRAY, 2)); 
      panel.add(label); 
     } 
     return panel; 
    } 

    private ImageIcon[] createImageIcons() { 
     String[] files = {"blackcircle.png", 
      "bluecircle.png", 
      "greencircle.png", 
      "greycircle.png", 
      "orangecircle.png", 
      "redcircle.png", 
      "yellowcircle.png" 
     }; 
     ImageIcon[] icons = new ImageIcon[files.length]; 
     for (int i = 0; i < files.length; i++) { 
      icons[i] = new ImageIcon(getClass().getResource("/circles/" + files[i])); 
     } 
     return icons; 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new CircleImages(); 
      } 
     }); 
    } 
}