setPreferredSize 有哪些副作用?

2024-03-03

我有包含多个面板的窗口。我无权访问窗口代码。 (我只能修改面板的代码。)

我从面板上移除了一些组件。窗户的尺寸缩小了。但窗口太小,无法正确显示所有内容。

我添加了行setPreferredSize(getPreferredSize());。现在窗口大小合适。

setPreferredSize 有哪些副作用?

编辑:使用 BorderLayout。哪个应该忽略 getXXXSize()。我的面板位于 CENTRE。不适合屏幕的面板位于北方。


这就是正在发生的事情:

  • getPreferredSize()查看之前是否设置过尺寸。如果没有,该方法会向组件本身(即您的 JPanel)的 LayoutManager 询问首选尺寸,然后根据组件计算该尺寸。
  • setPreferredSize(...)然后在 JPanel 上设置该值,并记住它以供以后使用。
  • 稍后您将删除 JPanel 的一些组件。
  • 甚至稍后,当窗口尝试重新布局自身(或被告知这样做)时,窗口的(或 contentpane 的/RootPane 的/...)Layoutmanager 会调用 JPanel 的getPreferredSize()再次方法。
  • now getPreferredSize()不询问 JPanel 的 LayoutManager,而只是返回先前设置的存储大小setPreferredSize().

For width, the BorderLayout is ignoring the preferred width of the NORTH and south component, it only takes CENTER, EAST and WEST into account. (Similarly for height).

我只是看了一下实施BorderLayout.preferredLayoutSize(来自 Sun 的 1.6.0_13),它的工作原理如下:

宽度计算如下

max(  EAST.width + CENTER.width + WEST.width + h-gaps,
      NORTH.width, SOUTH.width ) + insets

高度计算如下

max( EAST.height, CENTER.height, WEST.height)
+ NORTH.height + SOUTH.height + v-gaps + insets

(每一个width/height是的值preferredSize这些组件。) 如果五个组件中的某些缺失,则不包括它们的高度/宽度,也不包括间隙。)

它的作用是一样的minimalLayoutSize, while maximumLayoutSize只是返回Integer.MAX_VALUE.

因此,原则上它应该开箱即用。

但一般来说,如果窗口的布局不在您的控制之下,您不必担心不在您控制的组件被切断:-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

setPreferredSize 有哪些副作用? 的相关文章

随机推荐

  • SQL Server 2005中使用存储过程检查字符串是否包含子字符串

    我有一根绳子 mainString CATCH ME IF YOU CAN 我想检查一下这个词是否ME在里面 mainString 如何在 SQL 中检查字符串是否包含特定子字符串 CHARINDEX http msdn microsoft
  • Python 3 pandas.groupby.filter

    我正在尝试执行一个与本文档中的示例非常相似的 groupby 过滤器 pandas groupby 过滤器 https pandas pydata org pandas docs stable reference api pandas co
  • 使用鼠标事件通过 Javascript 移动图像

    这应该很简单 但每次我尝试时都会遇到不同的问题 我正在尝试使用鼠标事件 例如 mousedown mouseup mousemove clientX 和 clientY 在屏幕上移动图像 然后我尝试使用绝对定位将其应用到图像 我认为下面的代
  • 如何将表存储引擎从MyISAM更改为InnoDB

    我执行了命令show table status 发现我所有的表的引擎类型都是MyISAM 我想将引擎类型更改为InnoDB 我搜索并找到了相应的查询并将其写为 alter table PROJECT TITLES ORGANIZATION
  • Selenium:启动网站后我们如何检查是否启动了正确的页面

    在 Selenium 中 启动网站后 我们如何检查是否启动了正确的页面 例子 如果我想启动www google com 运行代码后如何检查是否已启动同一页面 I used Assert assertEquals Correct web pa
  • BigQuery 正则表达式中的前瞻

    BigQuery regexp 似乎不支持前瞻功能 有谁知道这是否正确 如果是 是否有计划在不久的将来支持它 BigQuery 正则表达式用途re2 https code google com p re2 似乎没有计划向 re2 添加环视断
  • MySQL 数学和 LIMIT 中的 COUNT(*)

    是否可以让 MySQL LIMIT 具有总行数除以 2 的偏移量 以便查询看起来像这样 SELECT FROM test LIMIT COUNT 2 5 其中 5 只是一个数字 这不可能 来自文档 http dev mysql com do
  • c++:错误:无法识别的命令行选项“-std=c++14”

    我刚刚将我的电脑从 Ubuntu 15 10 迁移到 Linux Mint 17 3 在此转变之前 该项目在 CLion 中编译得很好 现在 它给出了以下错误 c 错误 无法识别的命令行选项 std c 14 这可能是由于我的 CMake
  • 在 java 中处理文件

    我有一个字符串数组 我想将这些字符串保存在文件中 问题是 我需要创建一个名为 db txt 的新文件 仅当它不存在时 然后以某种方式向其写入字符串 然后我希望能够从该文件读取字符串并将它们插入到数组中 插入和使用数组不是问题 但问题是如何弄
  • Android 市场上的 Android 发布商帐户

    我已于12月2日在Android Market支付了25美元 但到目前为止我的开发者帐户尚未激活 我无法通过它发布应用程序 您对 Android Market 的注册仍在处理中 你 可以将应用程序上传到Android Market 但不能发
  • 为什么我在 Logcat 中看不到我的打印语句?

    我尝试在我的第一个 Android 程序上调试代码 我开始使用常规 println 它在早期的 main onCreate 方法中工作 在 LogCat 中显示结果 然而 它似乎在下面不起作用 所以然后我开始尝试计算 Log i Log d
  • 告诉我为什么这不会导致超时错误(selenium 2 webdriver)?

    from selenium import webdriver from selenium webdriver support ui import WebDriverWait browser webdriver Firefox browser
  • 如何将已经签出的 svn 存储库导入到 Eclipse 中?

    我已经签出了一个 Subversion 存储库 并将其保存在我的本地硬盘中 现在 我如何将其导入到 Eclipse 中 当我选择的时候文件 gt 导入选择SVN 只有一个选项可以再次从服务器签出项目 文件 gt 新建项目似乎是针对我们正在从
  • 在 AutoCompleteTextView Android HoneyComb 操作栏中显示光标

    我在 Honeycomb 操作栏中放置了一个 Android AutoCompleteTextView 问题是即使 AutoCompleteTextView 具有焦点 它也不会显示光标 因此最终用户认为该框没有焦点 将这些属性添加到 Aut
  • Django queryset - 是否可以对 FloatField 进行过滤?

    我正在尝试执行一个非常简单的操作 但遇到了问题 我有一个简单的模型 class MyModel models Model date models DateTimeField null False value models FloatFiel
  • 内部类对象错误

    import java io class YY int a 0 void putValue int m a m inner x new inner x display class inner void display System out
  • 为什么将短变量分配给整数引用会产生编译时错误?

    我有以下 Java 代码 class Boxing public static void main String args short s 10 Integer iRef s 为什么编译时会产生错误 如果我在表达式中显式地将短整型类型转换为
  • python os.listdir 不显示所有文件

    在我的windows 7 64位系统中 有一个名为msconfig exe在文件夹中c windows system32 是的 它必须存在 但是当我使用os listdir搜索文件夹c windows system32 我没有收到文件 这是
  • Oracle - 第二级子查询无法看到主查询中的字段

    在 Oracle 12c 中 以下查询有效 但在 Oracle 11g 中无效 因为二级子查询无法看到主查询中的字段 如何重写查询以使其在 Oracle 11 中也能工作 SELECT lvl unique code SELECT uniq
  • setPreferredSize 有哪些副作用?

    我有包含多个面板的窗口 我无权访问窗口代码 我只能修改面板的代码 我从面板上移除了一些组件 窗户的尺寸缩小了 但窗口太小 无法正确显示所有内容 我添加了行setPreferredSize getPreferredSize 现在窗口大小合适