posts - 37, comments - 8, trackbacks - 0, articles - 0

          java基礎:GUI基礎編程(下)

          Posted on 2008-08-10 07:06 夢與橋 閱讀(675) 評論(0)  編輯  收藏 所屬分類: java基礎

          10、布局管理編程演示:
                  §流布局管理器(FlowLayout):

          import javax.swing.*;
          import java.awt.*;
          public class FlowLayoutDemo extends JFrame{
           JPanel p;
           JLabel lblUser;
           JTextField txtUser;
           JButton btnCheck,btnExit;
           public FlowLayoutDemo(){
            super("流布局演示");
            setSize(250,150);
            p=new JPanel();
            p.setLayout(new FlowLayout());
            getContentPane().add(p);
            lblUser=new JLabel("用戶名:");
            txtUser=new JTextField(16);
            btnCheck=new JButton("檢測用戶名");
            btnExit=new JButton("退出");
            p.add(lblUser);
            p.add(txtUser);
            p.add(btnCheck);
            p.add(btnExit);
            setVisible(true);
            
           }
           public static void main(String[] args) {
            new FlowLayoutDemo();
           }
          }
                  §邊界布局管理器(BorderLayout):
          import javax.swing.*;
          import java.awt.*;
          public class BorderLayoutDemo extends JFrame{
              JPanel p;
              JButton b1,b2,b3,b4;
              JTextArea ta;
              
          public BorderLayoutDemo(){
                  
          super("邊界布局演示");
                  setSize(
          250,150);
                  p
          =new JPanel();
                  p.setLayout(
          new BorderLayout());
                  getContentPane().add(p);
                  b1
          =new JButton("East");
                  b2
          =new JButton("West");
                  b3
          =new JButton("North");
                  b4
          =new JButton("South");
                  ta
          =new JTextArea("Center");
                  p.add(b1,
          "East");
                  p.add(b2,BorderLayout.WEST);
                  p.add(
          "North",b3);
                  p.add(
          "South",b4);
                  p.add(ta,
          "Center");
                  setVisible(
          true);
                  
              }

              
          public static void main(String[] args) {
                  
          new BorderLayoutDemo();
              }

          }
                  §網格布局管理器(GridLayout):
          import javax.swing.*;
          import java.awt.*;
          public class GridLayoutDemo extends JFrame{
              JPanel p;
              JButton b1,b2,b3,b4;
              JTextArea ta;
              JTextField tf;
              
          public GridLayoutDemo(){
                  
          super("網格布局演示");
                  setSize(
          250,150);
                  p
          =new JPanel();
                  p.setLayout(
          new GridLayout(3,2));
                  getContentPane().add(p);
                  b1
          =new JButton("one");
                  b2
          =new JButton("two");
                  b3
          =new JButton("three");
                  b4
          =new JButton("four");
                  ta
          =new JTextArea("JTextArea");
                  tf
          =new JTextField("JTextField");
                  p.add(b1);
                  p.add(b2);
                  p.add(b3);
                  p.add(b4);
                  p.add(ta);
                  p.add(tf);
                  setVisible(
          true);
                  
              }

              
          public static void main(String[] args) {
                  
          new GridLayoutDemo();
              }

          }
                  §網格袋布局管理器(GridBagLayout):
          import javax.swing.*;
          import java.awt.*;
          public class GridBagLayoutDemo extends JFrame{
              JPanel p;
              JTextArea ta;
              JTextField tf;
              JButton b1,b2;
              JLabel l1,l2;
              GridBagConstraints gbc;
              GridBagLayout gbl;
              
          private void addComponent(Component c,GridBagLayout g
                      ,GridBagConstraints gc,
          int column ,int row,int width,int height)
              
          {
                  gc.gridx
          =column;//指定包含組件的顯示區域開始邊的單元格
                  gc.gridy=row;//指定位于組件顯示區域的頂部的單元格
                  gc.gridwidth=width;//指定在組件顯示區域的一行中的單元格數
                  gc.gridheight=height;//指定在組件顯示區域的一列中的單元格數
                  g.setConstraints(c, gc);//設置此布局中指定組件的約束條件
                  p.add(c);
              }

              
          public GridBagLayoutDemo(){
                  
          super("網格袋布局演示");
                  setSize(
          250,150);
                  p
          =new JPanel();
                  gbc
          =new GridBagConstraints();
                  gbl
          =new GridBagLayout();
                  p.setLayout(gbl);
                  getContentPane().add(p);
                  ta
          =new JTextArea("我是文本域",5,10);
                  b1
          =new JButton("我是按鈕b1.");
                  b2
          =new JButton("我是按鈕b2");
                  tf
          =new JTextField("我是文本框");
                  l1
          =new JLabel("我是一個標簽");
                  l2
          =new JLabel("我是另一個標簽");
                  
          //布局JTextArea
                  gbc.weightx=0;//指定如何分布額外的水平空間
                  gbc.weighty=0;//指定如何分布額外的垂直空間
                  
          //BOTH:在水平方向和垂直方向上同時調整組件大小
                  
          //fill:當組件的顯示區域大于它所請求的顯示區域的大小時使用此字段
                  gbc.fill=GridBagConstraints.BOTH;
                  addComponent(ta,gbl,gbc,
          0,0,1,3);
                  
          //布局按鈕b1
                  gbc.fill=GridBagConstraints.HORIZONTAL;
                  addComponent(b1,gbl,gbc,
          1,0,2,1);
                  
          //布局按鈕b2
                  gbc.fill=GridBagConstraints.HORIZONTAL;
                  addComponent(b2,gbl,gbc,
          1,1,2,1);
                  setVisible(
          true);
                  
          //布局文本框tf
                  gbc.fill=GridBagConstraints.BOTH;
                  addComponent(tf,gbl,gbc,
          1,2,2,1);
                  setVisible(
          true);
                  
          //布局標簽l1
                  gbc.fill=GridBagConstraints.BOTH;
                  addComponent(l1,gbl,gbc,
          0,3,2,1);
                  setVisible(
          true);
                  
          //布局標簽l2
                  gbc.fill=GridBagConstraints.BOTH;
                  addComponent(l2,gbl,gbc,
          1,3,2,1);
                  setVisible(
          true);
                  
              }

              
          public static void main(String[] args) {
                  
          new GridBagLayoutDemo();
              }

          }

                  §卡片布局管理器(CardLayout):
          import javax.swing.*;
          import java.awt.*;
          public class CardLayoutDemo extends JFrame{
              CardLayout cl;
              JPanel p;
              JButton b1,b2,b3,b4;
              
          public CardLayoutDemo(){
                  
          super("卡片布局演示");
                  setSize(
          150,250);
                  cl
          =new CardLayout();
                  p
          =new JPanel();
                  p.setLayout(cl);
                  getContentPane().add(p);
                  b1
          =new JButton("我是第一張卡片");
                  b2
          =new JButton("我是第二張卡片");
                  b3
          =new JButton("我是第三張卡片");
                  b4
          =new JButton("我是第四張卡片");
                  p.add(
          "b1",b1);
                  p.add(
          "b2",b2);
                  p.add(
          "b3",b3);
                  p.add(
          "b4",b4);
                  setVisible(
          true);
                  
          while(true){
                      
          try {
                          Thread.sleep(
          2000);
                      }
           catch (InterruptedException e) {
                          e.printStackTrace();
                      }

                      cl.next(p);
                  }

                  
              }

              
          public static void main(String[] args) {
                  
          new CardLayoutDemo();
              }

          }
                  §盒式布局管理器(BoxLayout):
          import java.awt.FlowLayout;
          import java.awt.TextField;
          import javax.swing.JButton;
          import javax.swing.JLabel;
          import javax.swing.Box;
          import javax.swing.JFrame;

          public class BoxLayoutDemo
          {
              
          public static void main(String args[])
              
          {
                  JFrame frame
          =new JFrame("用戶登錄");
                  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                  frame.setSize(
          300,200);
                  TextField password
          =new TextField(15);
                  password.setEchoChar(
          '*');

                  Box left,right,top,bottom,base,basebox;

                  top
          =Box.createHorizontalBox();
                  top.add(
          new JLabel("用戶登錄"),JLabel.CENTER);

                  left
          =Box.createVerticalBox();
                  left.add(
          new JLabel("用戶名:"));
                  left.add(Box.createVerticalStrut(
          8));
                  left.add(
          new JLabel("密碼:"));

                  right
          =Box.createVerticalBox();
                  right.add(
          new TextField(10));
                  right.add(Box.createVerticalStrut(
          8));
                  right.add(password);

                  bottom
          =Box.createHorizontalBox();
                  bottom.add(
          new JButton("登錄"));
                  bottom.add(Box.createVerticalStrut(
          10));
                  bottom.add(
          new JButton("重置"));

                  basebox
          =Box.createHorizontalBox();
                  basebox.add(left);
                  basebox.add(Box.createHorizontalStrut(
          10));
                  basebox.add(right);

                  base
          =Box.createVerticalBox();
                  base.add(top);
                  base.add(Box.createVerticalStrut(
          10));
                  base.add(basebox);
                  base.add(Box.createVerticalStrut(
          10));
                  base.add(bottom);

                  frame.setLayout(
          new FlowLayout());
                  frame.add(base);
                  frame.setVisible(
          true);
              }

          }
                  §空布局管理器(自定義布局):
          import javax.swing.*;
          import java.awt.*;
          public class NullLayoutDemo extends JFrame{
              JPanel p;
              JButton b1,b2,b3,b4;
              
          public NullLayoutDemo(){
                  
          super("自定義布局演示");
                  setSize(
          250,150);
                  p
          =new JPanel();
                  p.setLayout(
          null);
                  getContentPane().add(p);
                  b1
          =new JButton("one");
                  b1.setBounds(
          10,20,100,30);//設置的依次是x、y坐標,長與寬
                  b2=new JButton("two");
                  b2.setBounds(
          120,20,100,30);
                  b3
          =new JButton("three");
                  b3.setBounds(
          10,70,100,30);
                  b4
          =new JButton("four");
                  b4.setBounds(
          120,70,100,30);
                  p.add(b1);
                  p.add(b2);
                  p.add(b3);
                  p.add(b4);
                  setVisible(
          true);
                  
              }

              
          public static void main(String[] args) {
                  
          new NullLayoutDemo();
              }

          }
          11、事件處理
          (1)Java事件模型:事件模型的3個組件:事件、事件源和事件監聽器
          (2)事件處理的工作原理:
                          §事件源是一個能夠注冊監聽器,且可為監聽器發送事件對象的對象
                          §一個監聽器對象是一個實現了專門的監聽器接口的類實例
                          §當事件發生時,事件源將事件對象發送給事件源所注冊的監聽器(一個或多個)
                          §監聽器對象使用事件對象的信息來確定做出的反應
          (3)處理事件的一般步驟:
                          §定義要接收某事件的類并實現相應的監聽器接口
                          §在事件源中注冊類
                          §接收對應的事件對象,并通過監聽器接口中的方法進行處理
          (4)事件類型:AWT事件分為兩大類,低級事件和高級事件,前者是基于組件和容器的事件,后者是基于語義的事件。
                          §低級事件:
                              ComponentEvent——組件事件,組件尺寸的變化和移動,是所有低層事件的基類。
                              ContainerEvent——容器事件,組件增加和刪除。
                              WindowEvent——窗口事件,窗口被激活、關閉或者還原。
                              FucousEvent——焦點事件,組件獲得焦點或者失去焦點。
                              KeyEvent——鍵盤事件,鍵盤的按下或釋放。
                              MouseEvent——鼠標事件,鼠標鍵被按下、釋放、鼠標移動或者托動。
                              MouseWheelEvent——鼠標滾輪被滾動。
                          §高級事件:
                              ActionEvent——動作事件,按鈕單擊、TextField中按下Enter鍵、菜單選擇、選擇列表框等。
                              AdjustmentEvent——調節事件,在滾動條上移動滑塊和調節數值。
                              ItemEvent——選擇列表框中的項目。
                              TextEvent——文本事件,文本對象發生改變。
          (5)動作事件示例程序:
          import javax.swing.*;
          import java.awt.event.*;
          public class ActionEventDemo extends JFrame implements ActionListener{
              
          //聲明組件
              JLabel lblTitle,lblUser,lblPass;
              JTextField txtUser;
              JPasswordField pwdPass;
              JButton btnLogin,btnExit;
              JPanel pnlMain;
              
          //構造方法
              public ActionEventDemo(){
                  
          super("用戶登錄");
                  pnlMain
          =new JPanel();
                  
          this.getContentPane().add(pnlMain);
                  
          //實例化組件
                  String address="G:\\00\\images\\";
                  lblTitle
          =new JLabel(new ImageIcon(address+"welcome.gif"));
                  lblUser
          =new JLabel("用戶名:");
                  txtUser
          =new JTextField(12);
                  lblPass
          =new JLabel("密碼:");
                  pwdPass
          =new JPasswordField(12);
                  
          //"登錄"按鈕
                  Icon imgLogin=new ImageIcon(address+"login.gif");
                  btnLogin
          =new JButton("登錄(L)",imgLogin);
                  btnLogin.setMnemonic(
          'L');//鍵盤助記符
                  btnLogin.setToolTipText("點擊登錄");//工具提示文字
                  btnLogin.addActionListener(this);
                  
          //"退出"按鈕
                  Icon imgExit=new ImageIcon(address+"exit.gif");
                  btnExit
          =new JButton("退出(x)",imgExit);
                  btnLogin.setMnemonic(
          'X');
                  btnExit.setToolTipText(
          "退出登錄");
                  btnExit.addActionListener(
          this);
                  
          //添加組件到面板
                  pnlMain.add(lblTitle);
                  pnlMain.add(lblUser);
                  pnlMain.add(txtUser);
                  pnlMain.add(lblPass);
                  pnlMain.add(pwdPass);
                  pnlMain.add(btnLogin);
                  pnlMain.add(btnExit);
                  
          //設置窗口屬性
                  setSize(450,400);
                  setResizable(
          false);
                  setVisible(
          true);
                  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              }

              
          public void actionPerformed(ActionEvent ae){
                  
          if(ae.getSource()==btnLogin){
                      
          if(txtUser.getText().equals("admin")&&pwdPass.getText().equals("admin"))
                          JOptionPane.showMessageDialog(
          null,"歡迎登錄");
                      
          else JOptionPane.showMessageDialog(null,"用戶名或密碼錯誤");            
                  }

                  
          if(ae.getSource()==btnExit){
                      System.exit(
          0);
                  }

              }

              
          public static void main(String[] args) {
                  
          new ActionEventDemo();
              }


          }

          (5)鍵盤事件示例程序:

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

          public class KeyEventDemo {
           public static void main(String args[]) {
            SketchFrame frame = new SketchFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
           }
          }

          class SketchFrame extends JFrame {
           public SketchFrame() {
            setTitle("鍵盤事件");
            setSize(300, 200);
            final SketchPanel panel = new SketchPanel();
            final Container contentPane = getContentPane();
            contentPane.add(panel);
           }
          }

          class SketchPanel extends JPanel {
           private Point2D last;
           private ArrayList lines;
           private static final int INCREMENT = 10;

           public SketchPanel() {
            last = new Point2D.Double(100, 100);// 設置開始點坐標
            lines = new ArrayList();
            KeyHandler listener = new KeyHandler();
            addKeyListener(listener);// 注冊事件監聽器
            setFocusable(true);
           }

           // 添加坐標
           public void add(int dx, int dy) {
            Point2D end = new Point2D.Double(last.getX()
              + dx, last.getY() + dy);// 得到終點坐標
            Line2D line = new Line2D.Double(last, end);
            lines.add(line);
            repaint();
            last = end;
           }

           // 畫圖方法
           public void paintComponent(Graphics g){
            super.paintComponent(g);
            Graphics2D g2=(Graphics2D)g;
            for(int i=0;i<lines.size();i++){
             g2.draw((Line2D)lines.get(i));
            }
           }

           private class KeyHandler implements KeyListener {
            // 按鍵被按下事件
            public void keyPressed(KeyEvent e) {
             int keyCode = e.getKeyCode();
             int d;
             d = INCREMENT;
             // 對小鍵盤方向鍵添加具體的事件響應
             if (keyCode == KeyEvent.VK_LEFT)
              add(-d, 0);
             else if (keyCode == KeyEvent.VK_RIGHT)
              add(d, 0);
             else if (keyCode == KeyEvent.VK_UP)
              add(0, -d);
             else if (keyCode == KeyEvent.VK_DOWN)
              add(0, d);
            }

            public void keyReleased(KeyEvent e) {
            }

            // 按鍵被單擊事件監聽
            public void keyTyped(KeyEvent e) {
             char keyChar = e.getKeyChar();
             int d;
             if (Character.isUpperCase(keyChar)) {
              d = INCREMENT;
              keyChar = Character.toLowerCase(keyChar);
             } else
              d = INCREMENT;
              //為鍵盤“h、l、k、j“添加事件響應
             if (keyChar == 'h')
              add(-d, 0);
             else if (keyChar == 'l')
              add(d, 0);
             else if (keyChar == 'k')
              add(0, -d);
             else if (keyChar == 'j')
              add(0, d);
            }
           }
          }

          (6)鼠標事件示例程序:
          import java.awt.*;
          import java.awt.event.*;
          import javax.swing.*;
          public class MouseEventDemo extends MouseMotionAdapter{
              JFrame frmMain;
              
          int intX,intY;
              JPanel pnlMain;
              JLabel lblX,lblY;
              JTextField txtX,txtY;
              GridLayout glMain;
              
          public MouseEventDemo(){
                  frmMain
          =new JFrame("鼠標事件演示");
                  pnlMain
          =new JPanel();
                  frmMain.getContentPane().add(pnlMain);
                  glMain
          =new GridLayout(2,2);
                  pnlMain.setLayout(glMain);
                  lblX
          =new JLabel("當前鼠標X坐標:");
                  lblY
          =new JLabel("當前鼠標Y坐標:");
                  txtX
          =new JTextField(5);
                  txtY
          =new JTextField(5);
                  pnlMain.add(lblX);
                  pnlMain.add(txtX);
                  pnlMain.add(lblY);
                  pnlMain.add(txtY);
                  
          //定義、綁定鼠標事件監聽器對象
                  frmMain.addMouseMotionListener(this);
                  frmMain.setSize(
          250,150);
                  frmMain.setVisible(
          true);
              }

              
          //重寫MmouseMotionActionListEner接口中指定方法
              public void mouseMoved(MouseEvent e){
                  intX
          =e.getX();
                  intY
          =e.getY();
                  txtX.setText(String.valueOf(intX));
                  txtY.setText(String.valueOf(intY));
              }

              
          public static void main(String args[]){
                  MouseEventDemo med
          =new MouseEventDemo();
              }
              
          }
          主站蜘蛛池模板: 白河县| 明星| 蛟河市| 扎鲁特旗| 泾阳县| 大洼县| 阿坝县| 临高县| 宁夏| 常山县| 池州市| 都昌县| 讷河市| 中阳县| 宁津县| 顺昌县| 和林格尔县| 张家港市| 揭阳市| 云和县| 长治市| 凯里市| 长丰县| 庆阳市| 通许县| 玉门市| 逊克县| 吴川市| 赞皇县| 定远县| 万山特区| 朝阳县| 衡阳市| 班戈县| 藁城市| 塘沽区| 秦皇岛市| 文成县| 柳河县| 阿荣旗| 广宗县|