Re: [問題] Swing的調整視窗相關問題
※ 引述《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)
推
01/08 01:54, , 1F
01/08 01:54, 1F
→
01/08 01:58, , 2F
01/08 01:58, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):