Do you drink java?



                像寫情書一樣coding

           

          [Swing] 布局管理器 - OverlayLayout

          OverlayLayout是用于排列重疊組件的布局管理器。它的用途是以一些對齊的點為基準將一些組件層疊的放置在布局容器中。

          組件的橫軸和縱軸的對齊點介于0.0和1.0之間。橫軸(X軸)上0.0代表組件的左側面,1.0代表組件的右側面;縱軸(Y軸)上0.0和1.0分別代表組件的頂部和底部。

          構造函數
          public OverlayLayout(Container target)

          因為構造函數不會為target對象安裝結果布局管理器,所以我們還必須調用setLayout()來完成此功能。
          JPanel p1 = new JPanel();
          OverlayLayout overlay 
          = new OverlayLayout(p1);
          p1.setLayout(overlay); 

          在OverlayLayout布局管理器中,每個組件都有一對橫縱坐標值,每個組件的位置只和它本身的橫縱坐標值有關,換句話說就是組件以他自己的位置作為基準,橫軸上0.0和1.0分別代表組件的左側面和右側面;縱軸上0.0和1.0分別代表組件的頂部和底部,和容器位置無關。如果一個組件的alignmentX屬性設置為0.5,原本左側面的位置對應0.0,現在變成了0.5,那么,現在組件的位置就要向左移動width/2的距離,使左側面的位置對應現在的0.0。縱軸亦是如此,明白了嗎?

          為了容易理解,我們來看《Java Swing》中關于OverlayLayout的一段樣例程序,它可以編譯運行。如圖,你可以在輸入框中調節容器中3個按鈕的X,Y軸的值來看他們在容器中的位置是怎樣改變的,多試幾次,你就可以完全理解OverlayLayout。

          OverlayTest.jpg
          // OverlayTest.java
          // A test of the OverlayLayout manager allowing experimentation.
          //

          import java.awt.*;
          import java.awt.event.*;
          import javax.swing.*;

          public class OverlayTest extends JFrame {

              
          public OverlayTest() {
                  
          super("OverlayLayout Test");
                  setSize(
          500300);
                  setDefaultCloseOperation(EXIT_ON_CLOSE);

                  
          final Container c = getContentPane();
                  c.setLayout(
          new GridBagLayout());

                  
          final JPanel p1 = new GridPanel();
                  
          final OverlayLayout overlay = new OverlayLayout(p1);
                  p1.setLayout(overlay);

                  
          final JButton jb1 = new JButton("B1");
                  
          final JButton jb2 = new JButton("B2");
                  
          final JButton jb3 = new JButton("B3");

                  Dimension b1 
          = new Dimension(6050);
                  Dimension b2 
          = new Dimension(8040);
                  Dimension b3 
          = new Dimension(10060);

                  jb1.setMinimumSize(b1);
                  jb1.setMaximumSize(b1);
                  jb1.setPreferredSize(b1);
                  jb2.setMinimumSize(b2);
                  jb2.setMaximumSize(b2);
                  jb2.setPreferredSize(b2);
                  jb3.setMinimumSize(b3);
                  jb3.setMaximumSize(b3);
                  jb3.setPreferredSize(b3);

                  SimpleReporter reporter 
          = new SimpleReporter();
                  jb1.addActionListener(reporter);
                  jb2.addActionListener(reporter);
                  jb3.addActionListener(reporter);

                  p1.add(jb1);
                  p1.add(jb2);
                  p1.add(jb3);

                  JPanel p2 
          = new JPanel();
                  p2.setLayout(
          new GridLayout(2,6));
                  p2.add(
          new JLabel("B1 X", JLabel.CENTER));
                  p2.add(
          new JLabel("B1 Y", JLabel.CENTER));
                  p2.add(
          new JLabel("B2 X", JLabel.CENTER));
                  p2.add(
          new JLabel("B2 Y", JLabel.CENTER));
                  p2.add(
          new JLabel("B3 X", JLabel.CENTER));
                  p2.add(
          new JLabel("B3 Y", JLabel.CENTER));
                  p2.add(
          new JLabel(""));

                  
          final JTextField x1 = new JTextField("0.0"4); // Button1 x alignment
                  final JTextField y1 = new JTextField("0.0"4); // Button1 y alignment
                  final JTextField x2 = new JTextField("0.0"4); 
                  
          final JTextField y2 = new JTextField("0.0"4); 
                  
          final JTextField x3 = new JTextField("0.0"4); 
                  
          final JTextField y3 = new JTextField("0.0"4); 

                  p2.add(x1);
                  p2.add(y1);
                  p2.add(x2);
                  p2.add(y2);
                  p2.add(x3);
                  p2.add(y3);


                  GridBagConstraints constraints 
          = new GridBagConstraints();
                  c.add(p1, constraints);

                  constraints.gridx 
          = 1;
                  JButton updateButton 
          = new JButton("Update");
                  updateButton.addActionListener(
          new ActionListener() {
                      
          public void actionPerformed(ActionEvent ae) {
                          jb1.setAlignmentX(
                              Float.valueOf(x1.getText().trim()).floatValue());
                          jb1.setAlignmentY(
                              Float.valueOf(y1.getText().trim()).floatValue());
                          jb2.setAlignmentX(
                              Float.valueOf(x2.getText().trim()).floatValue());
                          jb2.setAlignmentY(
                              Float.valueOf(y2.getText().trim()).floatValue());
                          jb3.setAlignmentX(
                              Float.valueOf(x3.getText().trim()).floatValue());
                          jb3.setAlignmentY(
                              Float.valueOf(y3.getText().trim()).floatValue());

                          p1.revalidate();
                      }

                  }
          );
                  c.add(updateButton, constraints);

                  constraints.gridx 
          = 0;
                  constraints.gridy 
          = 1;
                  constraints.gridwidth 
          = 2;
                  c.add(p2, constraints);
              }


              
          public static void main(String args[]) {
                  OverlayTest ot 
          = new OverlayTest();
                  ot.setVisible(
          true);
              }


              
          public class SimpleReporter implements ActionListener {
                  
          public void actionPerformed(ActionEvent ae) {
                      System.out.println(ae.getActionCommand());
                  }

              }


              
          public class GridPanel extends JPanel {
                  
          public void paint(Graphics g) {
                      
          super.paint(g);
                      
          int w = getSize().width;
                      
          int h = getSize().height;

                      g.setColor(Color.red);
                      g.drawRect(
          0,0,w-1,h-1);
                      g.drawLine(w
          /2,0,w/2,h);
                      g.drawLine(
          0,h/2,w,h/2);
                  }

              }

          }



          最后提醒,使用OverlayLayout布局管理器關鍵要記住X,Y軸對應組件位置,和容器沒有關系。只要明白這一點,使用還是很簡單方便的,我用OverlayLayout布局管理器clone了一個PhotoShop的工具面板。
          ToolWidget.jpg

          posted on 2005-11-02 23:08 leon 閱讀(3859) 評論(0)  編輯  收藏 所屬分類: JFC

          導航

          統計

          公告

          DSC_0106.jpg
          本博客已經搬家到CSDN
          http://blog.csdn.net/chenweionline




          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          About Technology

          My Favorite Website

          搜索

          積分與排名

          最新評論

          • 1.?re: 胃痙攣
          • 兄弟們你們都做胃鏡了嗎開的啥藥?有什么養胃秘方啊?請賜教啊!
          • --我也進來了
          • 2.?re: 胃痙攣
          • @痛啊
            我感覺比生孩子還疼,生孩子還能有意識呢!這種疼還叫不出來連說話的力氣都沒了
          • --我也進來了
          • 3.?re: 胃痙攣
          • 評論內容較長,點擊標題查看
          • --我也進來了
          • 4.?re: 胃痙攣
          • 我都周期性的發作,算來有4年了 。每年最少一次,一次最少2天。吃了好多藥就差沒去做胃鏡了。 剛剛發作就隨便煮了點姜湯喝下就好了些,不知道還會不會發作了。
          • --許家洛
          • 5.?re: 胃痙攣
          • 我昨晚也疼的要死。。上次疼的直接120送醫院了,一上120我竟然就不疼了,醫院里掉了瓶鹽水就放回家了。這次正好國外旅游中,幾乎疼了一整晚,整個在床上翻滾狀態了。今天不疼了,就是整個人難受。。。求助阿
          • --胃疼
          • 6.?re: [Swing]在 JFileChooser 中進行文件驗證的小技巧
          • 輸入*還是會有問題
          • --ngh
          • 7.?re: 胃痙攣[未登錄]
          • 昨晚一夜的身不如死的感覺,胃痙攣兄不要來了吧 ,求你了
          • --李飛
          • 8.?re: 胃痙攣
          • 評論內容較長,點擊標題查看
          • --daidai
          • 9.?re: 胃痙攣
          • 評論內容較長,點擊標題查看
          • --痛啊
          • 10.?re: 胃痙攣
          • 媽啊 痛的快死了~!第一次感覺過這樣的痛啊~!和女的生孩子有的一比了吧~!哭哭哭~!
          • --痛啊

          閱讀排行榜

          主站蜘蛛池模板: 孟连| 尤溪县| 孙吴县| 孝义市| 宁明县| 年辖:市辖区| 张家港市| 长汀县| 淳安县| 育儿| 伊宁县| 凌云县| 奉化市| 孙吴县| 晋宁县| 永安市| 平安县| 巢湖市| 前郭尔| 安福县| 洛南县| 密山市| 石狮市| 黄平县| 安达市| 江阴市| 长岛县| 漳浦县| 绵竹市| 开江县| 万山特区| 喜德县| 嘉峪关市| 临夏县| 荔波县| 肇庆市| 普安县| 天长市| 康保县| 中山市| 东至县|