<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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();
        }
        
    }
    主站蜘蛛池模板: 成人免费一级毛片在线播放视频| 久久国产乱子伦精品免费强| 一个人免费观看在线视频www| 亚洲综合一区二区精品导航| 日韩精品人妻系列无码专区免费 | 成年美女黄网站色大免费视频| 亚洲无圣光一区二区| 在线观看的免费网站无遮挡| 亚洲色偷偷av男人的天堂| 精品无码无人网站免费视频| 亚洲人成黄网在线观看| 免费国产成人高清在线观看网站| 亚洲三级中文字幕| 日本特黄特色免费大片| 无码免费又爽又高潮喷水的视频| 伊人久久大香线蕉亚洲五月天| 日韩视频免费在线观看| 自怕偷自怕亚洲精品| 免费电视剧在线观看| 阿v免费在线观看| 亚洲色精品aⅴ一区区三区| 亚欧免费一级毛片| 亚洲一区二区三区乱码在线欧洲| 精品国产一区二区三区免费看| 免费国产a理论片| 亚洲AV无码国产在丝袜线观看| 亚洲精品在线免费看| 亚洲中文无码永久免费| 亚洲精品国产福利一二区| 久久精品国产免费一区| 四虎必出精品亚洲高清| 国产亚洲大尺度无码无码专线 | 亚洲国产精品无码久久| 亚洲一区二区女搞男| 青娱乐免费视频在线观看| 欧美激情综合亚洲一二区| 亚洲人成中文字幕在线观看| 九九精品免费视频| 亚州**色毛片免费观看| 亚洲第一区视频在线观看| 免费一级一片一毛片|