动态绘制JButton

时间:2016-10-29 21:42:41

标签: java swing

好的,我正试图制作一个有背景图像和几个按钮的tic tac toe游戏。扩展JFrame之后:

Dimension screen;
GUI()
{
    setUndecorated(true);

    screen=Toolkit.getDefaultToolkit().getScreenSize();
    setSize(screen.width, screen.height);
    setLocation(0, 0);
    System.out.println(screen.width+" : "+ screen.height);
    try {
        setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("path"))) ) );
    } catch (IOException e1) {          
    }

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(null);
    setVisible(true);   
}

对于JFrame,它现在应该可以在我运行的每台PC上正常工作,因为它获取了screenSize并使用它来设置JFrame大小。但是:

    JButton buttons=new JButton[9];
    int x=110, y=260;
    for(int i=0;i<buttons.length;i++)
    {
        buttons[i]=new JButton("");
        buttons[i].setSize(350,150);
        buttons[i].setLocation(x,y);
        y+=(i%3==2)?160:0;
        x=(i%3==2)?110:x+400;                           
        add(buttons[i]);            
    }

这些按钮工作正常,或者只在我的电脑中在图像内画得很好,因为我根据MY screenSize设置了位置和大小。所以我需要一些关于如何在每台PC上绘制这些按钮的帮助。我可以用getScreenSize做一些算法吗?我无法想到任何事情。

我还读到我可以使用布局管理器,但我相信这些按钮不会被绘制出来,因为我希望按钮被绘制在图像中。这是IMAGE,所以你可以想象我真正想做的事情。 谢谢。

1 个答案:

答案 0 :(得分:0)

如果你不想使用布局容器,你可以在这里有几个选项。

1)使您的JFrame不可调整大小并设置固定的宽度和高度
setResizable(false); setSize(width, height);

2)让JFrame可调整大小并覆盖其resize事件

为不同的分辨率和屏幕尺寸创建背景图像。当JFrame的大小更改时,相应地更新背景图像。 例如:

frame.addComponentListener(new ComponentListener() {

 public void componentResized(ComponentEvent e) {
    if(getWidth() <=800 && getHeight() <=600) {
         setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("image1")))));
    } else if (getWidth() <=1024 && getHeight() <=768) {
        setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("image2")))));
    } else if (//more Resolutions...) {
      //ect...
    }
 }
});