作者sbrhsieh (好一个算出 94 的专家~~~)
看板java
标题Re: [问题] Swing的调整视窗相关问题
时间Sun Jan 1 02:52:38 2012
※ 引述《wqwdaniel (鸟儒)》之铭言:
: 我最近在写Swing的应用程式
: 但是遇到下列的问题
: 1.
: 我layout设定好之後有些component会显示而有些不会
: 而且每次run的时候显示与否可能都会不一样
: 解决方式就是我用滑鼠调整一下视窗就回复了
: 请问有没有其他的解决方式??
: 是因为layout没有写好吗??
假设你使用的 component 在实作上都是正确的。
有使用 layout manager 的 container,通常会在适当的时机主动要求其使用的
layout manager 来 layout child components(视窗缩放是适当的时机之一)。
一个 component 执行某个操作而改变了状态,而这个状态改变会造成此 component
对空间的需求,通常会设计让该操作主动去通知其 parent container 重新
layout,让 parent container 执行 validate method 或由该 component 执行
revalidate method(for JComponent)。如果一个 container 已经是 displayable
状态,之後去改变了其 child component 的状态,而没有再次 validate 该
container,是不会改变 container 的版面配置(除非造成 child component 改变的
操作本身有作 re-validate 相关的操作),比如说:一个视窗已经显示在萤幕上,
再把一个 component 加到这个视窗里,将无法看到刚加入的 component,因为他
的 size (通常)是 0 x 0,若经由明确地要求其 parent 作 validate 後,component
会被设定成/到一个特定的大小/位置,component 就能成为"可见"。
: 2.
: 我呼叫了滑鼠拖移的方法,元件当被拖移到适当的位置之後
: 我新增了新元件,而如同第一次的问题一样
: 因为我新增看不到所以我又重新调整视窗
: 结果因为window 被 resize之後所有的元件都跑回最刚开始的地方
: 我有找寻一些原因,是因为validate吗??
: 我想要的预期效果是
: 如果视窗被放大,里面的元件还是原封不动在的原地
: 彼此间的距离不会因而增加
: 希望各位可以解答我的疑惑
: 谢谢~
想随意摆放/设置 component 的位置/大小,通常就是不使用 layout manager,或是
使用取名类似 AbsoluteLayout 之类的 layout manager(component's location/size
就是其在 layout 用途上的 constraints)。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.45.28.23
※ 编辑: sbrhsieh 来自: 114.45.28.23 (01/01 13:53)
1F:推 wqwdaniel:谢谢你的教学文 我也再花许多时间找到相关的资料 01/08 01:54
2F:→ wqwdaniel:由於新生时课程swing只有浅酌 我会把这些资讯跟大家说 01/08 01:58