【问题标题】:Java Swing: Resizing component in JFrame without affecting other componentsJava Swing:在 JFrame 中调整组件大小而不影响其他组件
【发布时间】:2014-05-02 03:04:22
【问题描述】:

作为新手项目,我正在创建一个非常简单的游戏。它基于一款名为“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);
    }
}

当我运行它时,我得到以下输出:

  1. (初始标签高度)- 200
  2. (调整后的 Tower().height) - 100
  3. (调整后的标签高度)- 100

这表明我正在尝试做的是在某种程度上工作,但实际标签在视觉上保持相同的大小。

在开始时(游戏开始时应该将标签设置为可见大小的一半): 几场比赛后 - 蓝队的新塔高显示在左上角

我尝试过启用和禁用标签和框架上的调整大小属性,我曾经设法让它调整大小,但它随后以一种不幸的方式移动了框架的其他组件.如您所见,底部的“卡片”似乎确实会自行调整大小,尽管我没有明确指示他们这样做(可能是“卡片”中文本长度的影响?)我做错了什么?

【问题讨论】:

  • 据我所知,所有代码都在Swing中,根本没有JavaFX代码,所以标题中的[javafx]标签和JavaFX引用应该去掉?跨度>

标签: java swing netbeans


【解决方案1】:

重新阅读问题后,我意识到答案并不是问题的真正答案,而是更多的建议列表。我不会删除它,而是将其保留以防有人从中获得一些东西:-)

“我做错了什么?”

欢迎来到“为什么我应该使用布局管理器”的世界

空布局和尝试为所有内容设置大小和位置可能会引发大量问题。 Swing 是为与布局管理器一起使用而设计的。

  • 有些布局管理器会尊重首选尺寸,有些则不会。

  • 使用正确的布局管理器并使用嵌套的JPanel 和不同的布局管理器来获得您想要的结果

  • EmptyBordervgaphgap 用于空白空间。

  • 不要将大小或位置设置为任何内容。让布局管理器为您处理。

  • 查看Laying out Components withing a Container 了解不同的布局管理器。


编辑

如果您使用的是 Netbeans GUI BUilder,请查看 this answer 以获取有关如何使用设计工具使用不同布局管理器的帮助。

【讨论】:

  • 我将把它标记为答案,尽管最后我放弃了 GUI builder 的想法,只是去在 Eclipse 中创建一个分层的图形小程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 2021-06-14
  • 1970-01-01
相关资源
最近更新 更多