鷹翔宇空

          學習和生活

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
          引自:http://www.aygfsteel.com/leon/

          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(
          500,?300);
          ????????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(60,?50);
          ????????Dimension?b2?
          =?new?Dimension(80,?40);
          ????????Dimension?b3?
          =?new?Dimension(100,?60);

          ????????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 2006-02-15 15:37 TrampEagle 閱讀(1061) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 拜城县| 渑池县| 衡山县| 云龙县| 嵊泗县| 永善县| 当阳市| 林州市| 桃源县| 湖北省| 桂阳县| 本溪市| 阜城县| 绿春县| 博兴县| 江阴市| 固原市| 田林县| 双峰县| 广灵县| 龙门县| 镇坪县| 葫芦岛市| 中江县| 马公市| 霸州市| 肇东市| 安化县| 阳春市| 志丹县| 澄城县| 桃园县| 同德县| 通渭县| 南充市| 宜丰县| 宁安市| 兴海县| 巴南区| 绍兴市| 陵川县|