我有一个非常简单的游戏,我正在创建一个新手项目。它基于名为" Castlewars"的在线纸牌游戏。有两个玩家,每个都有一个塔,受到他们和对手玩牌的影响。目前我拥有集合和类的基本框架,我需要让游戏在一个非常简单的层面上运行,但是我在向用户显示这些效果时遇到了问题。我有以下代码,它应该更新jFrame GUI(在NetBeans 7.4中构建)中的两个jLabel,它们代表了玩家的塔:
private void adjustScreen(){
System.out.println (Integer.toString(jLabel1.getSize().height));
jLabel1.setSize(100, (playerRed.getTower().currentHeight() * 2));
System.out.println(Integer.toString(playerRed.getTower().currentHeight() * 2));
System.out.println (Integer.toString(jLabel1.getSize().height));
jLabel2.setSize(100, (playerBlue.getTower().currentHeight() * 2));
jLabel5.setText(Integer.toString(playerBlue.getTower().currentHeight()));
jLabel6.setText(Integer.toString(playerBlue.getGold()));
jLabel9.setText(Integer.toString(playerRed.getTower().currentHeight()));
jLabel10.setText(Integer.toString(playerRed.getGold()));
if (TurnBlue){
jPanel21.setBackground(inPlay);
jPanel10.setBackground(outPlay);
}else{
jPanel10.setBackground(inPlay);
jPanel21.setBackground(outPlay);
}
}
当我运行它时,我得到以下输出:
这表明我尝试做的是在某种程度上工作,但实际的标签在视觉上保持相同的大小。
开始时(游戏的启动应该将标签设置为可见尺寸的一半):
经过几场比赛 - 蓝色的新塔高显示在左上方
我已经开始在标签和框架上启用和禁用resize属性,我曾经设法让它调整大小,但它然后移动了框架的其他组件不幸的是。如你所见,"卡"虽然我没有明确指示他们这样做(可能是"卡片中文本长度的影响"?)我在做什么错误?
答案 0 :(得分:2)
在重新阅读问题后,我意识到答案并不是问题的答案,而是更多的建议清单。我会留下它,以防万一有人可以从中获取一些东西,而不是删除它: - )
“我做错了什么?”
欢迎来到“我为什么要使用布局管理器”
的世界可能会出现一些问题,这些问题可能来自null布局并尝试将大小和位置设置为所有内容。 Swing用于布局管理器。
有些布局管理员会尊重首选尺寸,有些则不会。
使用正确的布局管理器并使用嵌套的JPanel
和不同的布局管理器来获得所需的结果
将EmptyBorder
和vgap
及hgap
用于空白区域。
不要将尺寸或位置设置为任何东西。让布局经理为您处理。
浏览Laying out Components withing a Container以了解不同的布局管理器。
修改强>
如果你正在使用Netbeans GUI BUilder,请查看this answer,了解如何使用设计工具使用不同的布局管理器。