java基础:GUI基础编程(下)

转自:http://www.blogjava.net/haizhige/archive/2008/08/10/221091.html  梦之桥(博客园) 

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

  
  
  
  
  1. import javax.swing.*;  
  2. import java.awt.*;  
  3. public class FlowLayoutDemo extends JFrame{  
  4.  JPanel p;  
  5.  JLabel lblUser;  
  6.  JTextField txtUser;  
  7.  JButton btnCheck,btnExit;  
  8.  public FlowLayoutDemo(){  
  9.   super("流布局演示");  
  10.   setSize(250,150);  
  11.   p=new JPanel();  
  12.   p.setLayout(new FlowLayout());  
  13.   getContentPane().add(p);  
  14.   lblUser=new JLabel("用户名:");  
  15.   txtUser=new JTextField(16);  
  16.   btnCheck=new JButton("检测用户名");  
  17.   btnExit=new JButton("退出");  
  18.   p.add(lblUser);  
  19.   p.add(txtUser);  
  20.   p.add(btnCheck);  
  21.   p.add(btnExit);  
  22.   setVisible(true);  
  23.     
  24.  }  
  25.  public static void main(String[] args) {  
  26.   new FlowLayoutDemo();  
  27.  }  
  28. }  
  29.         §边界布局管理器(BorderLayout): import javax.swing.*;  
  30. import java.awt.*;  
  31. public class BorderLayoutDemo extends JFrame{  
  32.     JPanel p;  
  33.     JButton b1,b2,b3,b4;  
  34.     JTextArea ta;  
  35.     public BorderLayoutDemo(){  
  36.         super("边界布局演示");  
  37.         setSize(250,150);  
  38.         p=new JPanel();  
  39.         p.setLayout(new BorderLayout());  
  40.         getContentPane().add(p);  
  41.         b1=new JButton("East");  
  42.         b2=new JButton("West");  
  43.         b3=new JButton("North");  
  44.         b4=new JButton("South");  
  45.         ta=new JTextArea("Center");  
  46.         p.add(b1,"East");  
  47.         p.add(b2,BorderLayout.WEST);  
  48.         p.add("North",b3);  
  49.         p.add("South",b4);  
  50.         p.add(ta,"Center");  
  51.         setVisible(true);  
  52.           
  53.     }  
  54.     public static void main(String[] args) {  
  55.         new BorderLayoutDemo();  
  56.     }  
  57. }        §网格布局管理器(GridLayout): import javax.swing.*;  
  58. import java.awt.*;  
  59. public class GridLayoutDemo extends JFrame{  
  60.     JPanel p;  
  61.     JButton b1,b2,b3,b4;  
  62.     JTextArea ta;  
  63.     JTextField tf;  
  64.     public GridLayoutDemo(){  
  65.         super("网格布局演示");  
  66.         setSize(250,150);  
  67.         p=new JPanel();  
  68.         p.setLayout(new GridLayout(3,2));  
  69.         getContentPane().add(p);  
  70.         b1=new JButton("one");  
  71.         b2=new JButton("two");  
  72.         b3=new JButton("three");  
  73.         b4=new JButton("four");  
  74.         ta=new JTextArea("JTextArea");  
  75.         tf=new JTextField("JTextField");  
  76.         p.add(b1);  
  77.         p.add(b2);  
  78.         p.add(b3);  
  79.         p.add(b4);  
  80.         p.add(ta);  
  81.         p.add(tf);  
  82.         setVisible(true);  
  83.           
  84.     }  
  85.     public static void main(String[] args) {  
  86.         new GridLayoutDemo();  
  87.     }  
  88. }        §网格袋布局管理器(GridBagLayout): import javax.swing.*;  
  89. import java.awt.*;  
  90. public class GridBagLayoutDemo extends JFrame{  
  91.     JPanel p;  
  92.     JTextArea ta;  
  93.     JTextField tf;  
  94.     JButton b1,b2;  
  95.     JLabel l1,l2;  
  96.     GridBagConstraints gbc;  
  97.     GridBagLayout gbl;  
  98.     private void addComponent(Component c,GridBagLayout g  
  99.             ,GridBagConstraints gc,int column ,int row,int width,int height)  
  100.     {  
  101.         gc.gridx=column;//指定包含组件的显示区域开始边的单元格  
  102.         gc.gridy=row;//指定位于组件显示区域的顶部的单元格  
  103.         gc.gridwidth=width;//指定在组件显示区域的一行中的单元格数  
  104.         gc.gridheight=height;//指定在组件显示区域的一列中的单元格数  
  105.         g.setConstraints(c, gc);//设置此布局中指定组件的约束条件  
  106.         p.add(c);  
  107.     }  
  108.     public GridBagLayoutDemo(){  
  109.         super("网格袋布局演示");  
  110.         setSize(250,150);  
  111.         p=new JPanel();  
  112.         gbc=new GridBagConstraints();  
  113.         gbl=new GridBagLayout();  
  114.         p.setLayout(gbl);  
  115.         getContentPane().add(p);  
  116.         ta=new JTextArea("我是文本域",5,10);  
  117.         b1=new JButton("我是按钮b1.");  
  118.         b2=new JButton("我是按钮b2");  
  119.         tf=new JTextField("我是文本框");  
  120.         l1=new JLabel("我是一个标签");  
  121.         l2=new JLabel("我是另一个标签");  
  122.         //布局JTextArea  
  123.         gbc.weightx=0;//指定如何分布额外的水平空间  
  124.         gbc.weighty=0;//指定如何分布额外的垂直空间  
  125.         //BOTH:在水平方向和垂直方向上同时调整组件大小  
  126.         //fill:当组件的显示区域大于它所请求的显示区域的大小时使用此字段  
  127.         gbc.fill=GridBagConstraints.BOTH;  
  128.         addComponent(ta,gbl,gbc,0,0,1,3);  
  129.         //布局按钮b1  
  130.         gbc.fill=GridBagConstraints.HORIZONTAL;  
  131.         addComponent(b1,gbl,gbc,1,0,2,1);  
  132.         //布局按钮b2  
  133.         gbc.fill=GridBagConstraints.HORIZONTAL;  
  134.         addComponent(b2,gbl,gbc,1,1,2,1);  
  135.         setVisible(true);  
  136.         //布局文本框tf  
  137.         gbc.fill=GridBagConstraints.BOTH;  
  138.         addComponent(tf,gbl,gbc,1,2,2,1);  
  139.         setVisible(true);  
  140.         //布局标签l1  
  141.         gbc.fill=GridBagConstraints.BOTH;  
  142.         addComponent(l1,gbl,gbc,0,3,2,1);  
  143.         setVisible(true);  
  144.         //布局标签l2  
  145.         gbc.fill=GridBagConstraints.BOTH;  
  146.         addComponent(l2,gbl,gbc,1,3,2,1);  
  147.         setVisible(true);  
  148.           
  149.     }  
  150.     public static void main(String[] args) {  
  151.         new GridBagLayoutDemo();  
  152.     }  
  153. }  
  154.         §卡片布局管理器(CardLayout): import javax.swing.*;  
  155. import java.awt.*;  
  156. public class CardLayoutDemo extends JFrame{  
  157.     CardLayout cl;  
  158.     JPanel p;  
  159.     JButton b1,b2,b3,b4;  
  160.     public CardLayoutDemo(){  
  161.         super("卡片布局演示");  
  162.         setSize(150,250);  
  163.         cl=new CardLayout();  
  164.         p=new JPanel();  
  165.         p.setLayout(cl);  
  166.         getContentPane().add(p);  
  167.         b1=new JButton("我是第一张卡片");  
  168.         b2=new JButton("我是第二张卡片");  
  169.         b3=new JButton("我是第三张卡片");  
  170.         b4=new JButton("我是第四张卡片");  
  171.         p.add("b1",b1);  
  172.         p.add("b2",b2);  
  173.         p.add("b3",b3);  
  174.         p.add("b4",b4);  
  175.         setVisible(true);  
  176.         while(true){  
  177.             try {  
  178.                 Thread.sleep(2000);  
  179.             } catch (InterruptedException e) {  
  180.                 e.printStackTrace();  
  181.             }  
  182.             cl.next(p);  
  183.         }  
  184.           
  185.     }  
  186.     public static void main(String[] args) {  
  187.         new CardLayoutDemo();  
  188.     }  
  189. }        §盒式布局管理器(BoxLayout): import java.awt.FlowLayout;  
  190. import java.awt.TextField;  
  191. import javax.swing.JButton;  
  192. import javax.swing.JLabel;  
  193. import javax.swing.Box;  
  194. import javax.swing.JFrame;  
  195.  
  196. public class BoxLayoutDemo  
  197. {  
  198.     public static void main(String args[])  
  199.     {  
  200.         JFrame frame=new JFrame("用户登录");  
  201.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  202.         frame.setSize(300,200);  
  203.         TextField password=new TextField(15);  
  204.         password.setEchoChar('*');  
  205.  
  206.         Box left,right,top,bottom,base,basebox;  
  207.  
  208.         top=Box.createHorizontalBox();  
  209.         top.add(new JLabel("用户登录"),JLabel.CENTER);  
  210.  
  211.         left=Box.createVerticalBox();  
  212.         left.add(new JLabel("用户名:"));  
  213.         left.add(Box.createVerticalStrut(8));  
  214.         left.add(new JLabel("密码:"));  
  215.  
  216.         right=Box.createVerticalBox();  
  217.         right.add(new TextField(10));  
  218.         right.add(Box.createVerticalStrut(8));  
  219.         right.add(password);  
  220.  
  221.         bottom=Box.createHorizontalBox();  
  222.         bottom.add(new JButton("登录"));  
  223.         bottom.add(Box.createVerticalStrut(10));  
  224.         bottom.add(new JButton("重置"));  
  225.  
  226.         basebox=Box.createHorizontalBox();  
  227.         basebox.add(left);  
  228.         basebox.add(Box.createHorizontalStrut(10));  
  229.         basebox.add(right);  
  230.  
  231.         base=Box.createVerticalBox();  
  232.         base.add(top);  
  233.         base.add(Box.createVerticalStrut(10));  
  234.         base.add(basebox);  
  235.         base.add(Box.createVerticalStrut(10));  
  236.         base.add(bottom);  
  237.  
  238.         frame.setLayout(new FlowLayout());  
  239.         frame.add(base);  
  240.         frame.setVisible(true);  
  241.     }  
  242. }        §空布局管理器(自定义布局): import javax.swing.*;  
  243. import java.awt.*;  
  244. public class NullLayoutDemo extends JFrame{  
  245.     JPanel p;  
  246.     JButton b1,b2,b3,b4;  
  247.     public NullLayoutDemo(){  
  248.         super("自定义布局演示");  
  249.         setSize(250,150);  
  250.         p=new JPanel();  
  251.         p.setLayout(null);  
  252.         getContentPane().add(p);  
  253.         b1=new JButton("one");  
  254.         b1.setBounds(10,20,100,30);//设置的依次是x、y坐标,长与宽  
  255.         b2=new JButton("two");  
  256.         b2.setBounds(120,20,100,30);  
  257.         b3=new JButton("three");  
  258.         b3.setBounds(10,70,100,30);  
  259.         b4=new JButton("four");  
  260.         b4.setBounds(120,70,100,30);  
  261.         p.add(b1);  
  262.         p.add(b2);  
  263.         p.add(b3);  
  264.         p.add(b4);  
  265.         setVisible(true);  
  266.           
  267.     }  
  268.     public static void main(String[] args) {  
  269.         new NullLayoutDemo();  
  270.     }  
  271. }11、事件处理  
  272. 1)Java事件模型:事件模型的3个组件:事件、事件源和事件监听器  
  273. 2)事件处理的工作原理:  
  274.                 §事件源是一个能够注册监听器,且可为监听器发送事件对象的对象  
  275.                 §一个监听器对象是一个实现了专门的监听器接口的类实例  
  276.                 §当事件发生时,事件源将事件对象发送给事件源所注册的监听器(一个或多个)  
  277.                 §监听器对象使用事件对象的信息来确定做出的反应  
  278. 3)处理事件的一般步骤:  
  279.                 §定义要接收某事件的类并实现相应的监听器接口  
  280.                 §在事件源中注册类  
  281.                 §接收对应的事件对象,并通过监听器接口中的方法进行处理  
  282. 4)事件类型:AWT事件分为两大类,低级事件和高级事件,前者是基于组件和容器的事件,后者是基于语义的事件。  
  283.                 §低级事件:  
  284.                     ComponentEvent——组件事件,组件尺寸的变化和移动,是所有低层事件的基类。  
  285.                     ContainerEvent——容器事件,组件增加和删除。  
  286.                     WindowEvent——窗口事件,窗口被激活、关闭或者还原。  
  287.                     FucousEvent——焦点事件,组件获得焦点或者失去焦点。  
  288.                     KeyEvent——键盘事件,键盘的按下或释放。  
  289.                     MouseEvent——鼠标事件,鼠标键被按下、释放、鼠标移动或者托动。  
  290.                     MouseWheelEvent——鼠标滚轮被滚动。  
  291.                 §高级事件:  
  292.                     ActionEvent——动作事件,按钮单击、TextField中按下Enter键、菜单选择、选择列表框等。  
  293.                     AdjustmentEvent——调节事件,在滚动条上移动滑块和调节数值。  
  294.                     ItemEvent——选择列表框中的项目。  
  295.                     TextEvent——文本事件,文本对象发生改变。  
  296. 5)动作事件示例程序: import javax.swing.*;  
  297. import java.awt.event.*;  
  298. public class ActionEventDemo extends JFrame implements ActionListener{  
  299.     //声明组件  
  300.     JLabel lblTitle,lblUser,lblPass;  
  301.     JTextField txtUser;  
  302.     JPasswordField pwdPass;  
  303.     JButton btnLogin,btnExit;  
  304.     JPanel pnlMain;  
  305.     //构造方法  
  306.     public ActionEventDemo(){  
  307.         super("用户登录");  
  308.         pnlMain=new JPanel();  
  309.         this.getContentPane().add(pnlMain);  
  310.         //实例化组件  
  311.         String address="G:\\00\\images\\";  
  312.         lblTitle=new JLabel(new ImageIcon(address+"welcome.gif"));  
  313.         lblUser=new JLabel("用户名:");  
  314.         txtUser=new JTextField(12);  
  315.         lblPass=new JLabel("密码:");  
  316.         pwdPass=new JPasswordField(12);  
  317.         //"登录"按钮  
  318.         Icon imgLogin=new ImageIcon(address+"login.gif");  
  319.         btnLogin=new JButton("登录(L)",imgLogin);  
  320.         btnLogin.setMnemonic('L');//键盘助记符  
  321.         btnLogin.setToolTipText("点击登录");//工具提示文字  
  322.         btnLogin.addActionListener(this);  
  323.         //"退出"按钮  
  324.         Icon imgExit=new ImageIcon(address+"exit.gif");  
  325.         btnExit=new JButton("退出(x)",imgExit);  
  326.         btnLogin.setMnemonic('X');  
  327.         btnExit.setToolTipText("退出登录");  
  328.         btnExit.addActionListener(this);  
  329.         //添加组件到面板  
  330.         pnlMain.add(lblTitle);  
  331.         pnlMain.add(lblUser);  
  332.         pnlMain.add(txtUser);  
  333.         pnlMain.add(lblPass);  
  334.         pnlMain.add(pwdPass);  
  335.         pnlMain.add(btnLogin);  
  336.         pnlMain.add(btnExit);  
  337.         //设置窗口属性  
  338.         setSize(450,400);  
  339.         setResizable(false);  
  340.         setVisible(true);  
  341.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  342.     }  
  343.     public void actionPerformed(ActionEvent ae){  
  344.         if(ae.getSource()==btnLogin){  
  345.             if(txtUser.getText().equals("admin")&&pwdPass.getText().equals("admin"))  
  346.                 JOptionPane.showMessageDialog(null,"欢迎登录");  
  347.             else JOptionPane.showMessageDialog(null,"用户名或密码错误");              
  348.         }  
  349.         if(ae.getSource()==btnExit){  
  350.             System.exit(0);  
  351.         }  
  352.     }  
  353.     public static void main(String[] args) {  
  354.         new ActionEventDemo();  
  355.     }  
  356.  
  357. }  
  358. 5)键盘事件示例程序: import java.awt.*;  
  359. import java.awt.geom.*;  
  360. import java.util.*;  
  361. import java.awt.event.*;  
  362. import javax.swing.*;  
  363.  
  364. public class KeyEventDemo {  
  365.  public static void main(String args[]) {  
  366.   SketchFrame frame = new SketchFrame();  
  367.   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  368.   frame.setVisible(true);  
  369.  }  
  370. }  
  371.  
  372. class SketchFrame extends JFrame {  
  373.  public SketchFrame() {  
  374.   setTitle("键盘事件");  
  375.   setSize(300200);  
  376.   final SketchPanel panel = new SketchPanel();  
  377.   final Container contentPane = getContentPane();  
  378.   contentPane.add(panel);  
  379.  }  
  380. }  
  381.  
  382. class SketchPanel extends JPanel {  
  383.  private Point2D last;  
  384.  private ArrayList lines;  
  385.  private static final int INCREMENT = 10;  
  386.  
  387.  public SketchPanel() {  
  388.   last = new Point2D.Double(100100);// 设置开始点坐标  
  389.   lines = new ArrayList();  
  390.   KeyHandler listener = new KeyHandler();  
  391.   addKeyListener(listener);// 注册事件监听器  
  392.   setFocusable(true);  
  393.  }  
  394.  
  395.  // 添加坐标  
  396.  public void add(int dx, int dy) {  
  397.   Point2D end = new Point2D.Double(last.getX()  
  398.     + dx, last.getY() + dy);// 得到终点坐标  
  399.   Line2D line = new Line2D.Double(last, end);  
  400.   lines.add(line);  
  401.   repaint();  
  402.   last = end;  
  403.  }  
  404.  
  405.  // 画图方法  
  406.  public void paintComponent(Graphics g){  
  407.   super.paintComponent(g);  
  408.   Graphics2D g2=(Graphics2D)g;  
  409.   for(int i=0;i<lines.size();i++){  
  410.    g2.draw((Line2D)lines.get(i));  
  411.   }  
  412.  }  
  413.  
  414.  private class KeyHandler implements KeyListener {  
  415.   // 按键被按下事件  
  416.   public void keyPressed(KeyEvent e) {  
  417.    int keyCode = e.getKeyCode();  
  418.    int d;  
  419.    d = INCREMENT;  
  420.    // 对小键盘方向键添加具体的事件响应  
  421.    if (keyCode == KeyEvent.VK_LEFT)  
  422.     add(-d, 0);  
  423.    else if (keyCode == KeyEvent.VK_RIGHT)  
  424.     add(d, 0);  
  425.    else if (keyCode == KeyEvent.VK_UP)  
  426.     add(0, -d);  
  427.    else if (keyCode == KeyEvent.VK_DOWN)  
  428.     add(0, d);  
  429.   }  
  430.  
  431.   public void keyReleased(KeyEvent e) {  
  432.   }  
  433.  
  434.   // 按键被单击事件监听  
  435.   public void keyTyped(KeyEvent e) {  
  436.    char keyChar = e.getKeyChar();  
  437.    int d;  
  438.    if (Character.isUpperCase(keyChar)) {  
  439.     d = INCREMENT;  
  440.     keyChar = Character.toLowerCase(keyChar);  
  441.    } else 
  442.     d = INCREMENT;  
  443.     //为键盘“h、l、k、j“添加事件响应  
  444.    if (keyChar == 'h')  
  445.     add(-d, 0);  
  446.    else if (keyChar == 'l')  
  447.     add(d, 0);  
  448.    else if (keyChar == 'k')  
  449.     add(0, -d);  
  450.    else if (keyChar == 'j')  
  451.     add(0, d);  
  452.   }  
  453.  }  
  454. }  
  455. 6)鼠标事件示例程序: import java.awt.*;  
  456. import java.awt.event.*;  
  457. import javax.swing.*;  
  458. public class MouseEventDemo extends MouseMotionAdapter{  
  459.     JFrame frmMain;  
  460.     int intX,intY;  
  461.     JPanel pnlMain;  
  462.     JLabel lblX,lblY;  
  463.     JTextField txtX,txtY;  
  464.     GridLayout glMain;  
  465.     public MouseEventDemo(){  
  466.         frmMain=new JFrame("鼠标事件演示");  
  467.         pnlMain=new JPanel();  
  468.         frmMain.getContentPane().add(pnlMain);  
  469.         glMain=new GridLayout(2,2);  
  470.         pnlMain.setLayout(glMain);  
  471.         lblX=new JLabel("当前鼠标X坐标:");  
  472.         lblY=new JLabel("当前鼠标Y坐标:");  
  473.         txtX=new JTextField(5);  
  474.         txtY=new JTextField(5);  
  475.         pnlMain.add(lblX);  
  476.         pnlMain.add(txtX);  
  477.         pnlMain.add(lblY);  
  478.         pnlMain.add(txtY);  
  479.         //定义、绑定鼠标事件监听器对象  
  480.         frmMain.addMouseMotionListener(this);  
  481.         frmMain.setSize(250,150);  
  482.         frmMain.setVisible(true);  
  483.     }  
  484.     //重写MmouseMotionActionListEner接口中指定方法  
  485.     public void mouseMoved(MouseEvent e){  
  486.         intX=e.getX();  
  487.         intY=e.getY();  
  488.         txtX.setText(String.valueOf(intX));  
  489.         txtY.setText(String.valueOf(intY));  
  490.     }  
  491.     public static void main(String args[]){  
  492.         MouseEventDemo med=new MouseEventDemo();  
  493.     }      
  494. }  

 

你可能感兴趣的:(java,GUI,swing,SWT,布局管理器)