好的,我正试图制作一个有背景图像和几个按钮的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,所以你可以想象我真正想做的事情。 谢谢。
答案 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...
}
}
});