调整JButton和窗口的大小

时间:2014-03-10 00:30:46

标签: java swing user-interface layout

该窗口必须包含一个JPanel,其中包含一个8 x 8的JButtons数组,每个数组的大小为69 x 69像素,并显示ImageIcon而不是文本。在窗口的底部是一个JLabel,一个右对齐的JTextField和另外两个JButton,如图所示。窗口必须是不可调整的,大小为578 x 634像素。启动时,窗口应显示随机排列的彩色按钮,如图所示。

这是我到目前为止所有的帮助,非常感谢!

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

public class ShinyButtons extends JFrame 
{
    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();
    }

    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];
    }

    public ShinyButtons (String title) { 
        super(title); // Set title of window 
        setDefaultCloseOperation(EXIT_ON_CLOSE); // allow window to close 
        setSize(900, 300); // Set size of window      
    }

    public static 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") 
        };

    public static void main(String[] args) {

        ShinyButtons frame; 
        frame = new ShinyButtons("Shiny Buttons");  // Create window     
        frame.setVisible(true); // Show window

        JPanel panel = new JPanel(new GridLayout(8, 8));
        ImageIcon r= new ImageIcon("RedButton.png");
        ImageIcon o= new ImageIcon("OrangeButton.png");
        ImageIcon y= new ImageIcon("YellowButton.png");
        ImageIcon g= new ImageIcon("GreenButton.png");
        ImageIcon b= new ImageIcon("BlueButton.png");
        ImageIcon l= new ImageIcon("LightGrayButton.png");
        ImageIcon d= new ImageIcon("DarkGrayButton.png");

        JButton btn;

        btn = new JButton(o);
        btn.setPreferredSize(new Dimension(200, 100));
        panel.add(btn);

        panel.add(new JButton(r));
        panel.add(new JButton(o));
        panel.add(new JButton(y));
        panel.add(new JButton(g));
        panel.add(new JButton(b));
        panel.add(new JButton(l));
        panel.add(new JButton(d));

        frame.add(panel);

        frame.setVisible(true);
    }
}

1

2 个答案:

答案 0 :(得分:3)

您可以使用pack允许框架使用您的内容首选尺寸来确定框架的大小。

这很重要,因为此方法会考虑窗口边框装饰,setSize不会

你永远不应该对像素大小做出假设,特别是当你处理字体时,因为它们可能在不同的系统上以不同的大小呈现

像素完美精度是一种幻觉,你应该更多地关注可用性和流程,让布局经理做好自己的工作......

另请注意,在打包之前使框架无法打印非常重要

答案 1 :(得分:-1)

如果你有固定大小的按钮,jpanel和frame,你应该使用为按钮的最大值和最小值设置相同的值,在这种情况下是69x69,并且对于面板和框架,将属性resizable为false。