Absolute Layout

----------------siwuxie095 ide

   

   

   

   

   

   

根面板 contentPane 的默認佈局爲 Border Layout,將其 佈局

切換爲 Absolute Layout 動畫

   

Absolute Layout 即 絕對佈局,即 它沒有任何的限制,能夠 spa

在界面中任意擺放控件的位置 線程

   

在將控件拖動到面板上時,會出現參考線,參考線僅僅是 blog

爲了在界面中擺放元素時給出參考,而不具備任何實質性 事件

的吸附功能 get

   

「若是不使用參考線,能夠自由的將控件移動到任何位置」 it

   

   

   

   

當在面板中擺放好某控件,該控件的座標和大小都是固定的, io

不會隨窗體的縮放而產生任何變化

   

   

在絕對佈局的狀況下,能夠在代碼中任意修改元素的座標和大小

   

contentPane 中添加一個 JLabel,將其文本(text)改成:

This is a label,Rename 爲:label

   

Source 中修改代碼:

   

   

   

   

效果以下:

   

   

   

   

   

contentPane 中添加一個 JButton,將其文本(text)改成:

Run,Rename 爲:btnRun

   

在絕對佈局中,雖然不會有佈局管理器幫助擺放,可是能夠提供

最佳的靈活性

   

如:能夠編寫一個線程來爲當前的控件提供動畫(放大縮小、位置移動)

   

JButton 添加鼠標點擊事件,當點擊 Run 時,JLabel 上下浮動

   

JButton btnRun = new JButton("Run");

btnRun.addMouseListener(new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent arg0) {

 

//建立一個 SwingWoker 線程,指定泛型爲 String Integer

//要覆蓋 doInBackground() process() 方法

//建立完成後,須要調用 execute() 方法,將它運行

new SwingWorker<String, Integer>() {

 

//獲取 Y 的原座標,須要將 label 的聲明轉移到類中

int originalY=label.getY();

   

@Override

protected String doInBackground() throws Exception {

while (true) {

//每隔 50 毫秒執行一次

Thread.sleep(50);

//System.currentTimeMillis() 1970年到當前時間的毫秒值

//先從整型轉換成浮點型,又從浮點型轉換成整型

// 100 表示運動的快慢(越小速度越快,反比),

// 20 表示運動的幅度(越小幅度越小,正比)

//將值 publish() process()

publish((int)(Math.sin(System.currentTimeMillis()/100)*20));

}

}

 

@Override

protected void process(List<Integer> chunks) {

// chunks 中把值取出來

for (int dynamicY : chunks) {

//X 座標不變,Y 座標變化,爲標籤作了一個正弦的動畫

label.setLocation(label.getX(), originalY+dynamicY);

}

}

 

}.execute();

}

});

   

   

效果以下:

   

   

   

   

   

在絕對佈局中,當控件出現重疊時,層級高的控件會擋住

層級低的控件,並接收鼠標事件

   

   

   

   

   

   

   

   

【made by siwuxie095】

相關文章
相關標籤/搜索