2025-05-23

佈局管理編程演示:
        §流佈局管理器(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(); 
    }     

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *