Java swing

Posted hank-lkj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java swing相关的知识,希望对你有一定的参考价值。

一.Swing概述

二.创建窗体
三.常用组件

            1.JLabel标签组件

            2.JButton按钮组件

            3.JRadioButton(单选按钮)组件

            4.JCheckBox(复选框)组件

            5.JComboBox(选择框)组件

            6.JList(列表框)组件

            7.JTextField(文本框)组件

            8.JPasswordField(密码框)组件

            9.JTextArea(文本域)组件

四.常用布局管理器

            1.不使用布局管理器

            2.FlowLayout布局管理器

            3.BorderLayout布局管理器

            4.GridLayout布局管理器

五.常用面板

           1.JPanel面板

           2.JScrollPane面板

六.常用事件处理

          1.动作事件处理(ActionEvent类捕获)

常用的情况是:监听鼠标单击按钮后将进行发生的动作。动作事件可以通过实现接口ActionListener实现动作。

ActionEvent类中有两个常用方法:

1》getSource():用来获得处罚此次事件的组件对象,返回值类型为Object

2》getActionCommand():用来获得与当前动作相关的命令字符串,返回值类型为String

public interface ActionListener extends EventListener{

     public void actionPerformed(ActionEvent e);

}

举例:

package javaSwing;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class ActionEventExample extends JFrame {
    
    //定义动作事件的属性
    private JLabel label;   //用来提示信息

    public ActionEventExample() {
        // TODO Auto-generated constructor stub
        
        //对窗体进行设置
        super();
        setTitle("动作事件示例");
        setBounds(100,100,500,375);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    //设置关闭窗体时退出程序
        
        //对标签进行设置
        label=new JLabel();
        label.setText("欢迎登录!");
        label.setHorizontalAlignment(JLabel.CENTER);
        
        //对控制面板进行设置
        JPanel panel=new JPanel();
        getContentPane().add(label);
        
        //对按钮进行设置
        final JButton submitButton=new JButton();
        submitButton.setText("登录");
        submitButton.addActionListener(new buttonListener());
        getContentPane().add(submitButton,BorderLayout.SOUTH);
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
          ActionEventExample frame=new ActionEventExample();
          frame.setVisible(true);
    }
    
    class  buttonListener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            JButton button=(JButton) e.getSource();  //获得处罚此次事件的按钮对象
            String buttonName=e.getActionCommand();   //h获得触发此次事件的按钮的标签文本
            if(buttonName.equals("登录")){
                
                  label.setText("您已经成功登录");
                  button.setText("退出");
                
            }else{
                
                  label.setText("您已经安全退出");
                  button.setText("登录");
            }
        }
        
    }

}

          2.焦点事件处理

          3.鼠标事件处理

          4.键盘事件处理

七.拼图小游戏源代码

       步骤一:设计一个大窗体

       步骤二:在窗体添加两个控制面板

       步骤三:在控制面板中添加按钮和标签

       步骤四:对按钮进行监听

注意:本游戏是九宫格小游戏,九个图片中每一个都是120(px)*120(px)像素,制作九宫格教程可以参照微博:http://blog.sina.com.cn/s/blog_13a975b850102wyz3.html

同时注意图片的放置位置,imgs和src在同一级目录。对于java的目录位置可以参考博客:http://blog.csdn.net/slqslqshiliqiang/article/details/71435751

源代码:

package pingTuYouXi;

import java.awt.BorderLayout;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;

public class MedleyGame extends JFrame{
    
    //设置窗体属性
    private JPanel centerPanel;    //拼图按钮面板
    private JButton emptyButton;   //空白按钮对象

    
    public MedleyGame() {
        // TODO Auto-generated constructor stub
        super();   //继承JFrame类的构造方法
        setResizable(false);   //设置窗体大小不可改变
        setTitle("拼图游戏");     //设置窗体的标题
        setBounds(100,100,370,525);  //设置窗体的显示位置以及大小
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //设置关闭窗体时退出程序
        
        
        //为窗体创建一个一个标签组件和按钮组件
        final JPanel topPanel=new JPanel();        //创建面板对象
        topPanel.setBorder(new TitledBorder(null,"",TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION,null,null));         //为控制面板添加边框
        topPanel.setLayout(new BorderLayout());              //控制面板采用边界布局
        getContentPane().add(topPanel,BorderLayout.NORTH);   //将面板添加到窗体顶部
        //设置标签
        final JLabel modelLabel=new JLabel();
        modelLabel.setIcon(new ImageIcon("imgs/model.jpg"));
        topPanel.add(modelLabel,BorderLayout.WEST);           //将标签添加到面板的左侧
        //设置按钮
        final JButton startButton=new JButton();             //创建“下一局”按钮对象
        startButton.setText("下一局");
        startButton.addActionListener(new StartButtonAction());
        topPanel.add(startButton,BorderLayout.CENTER);
        
        
        
        //为窗体创建另一个面板,该面板是图片移动面板
        centerPanel=new JPanel();             //创建拼图按钮面板对象
        centerPanel.setBorder(new TitledBorder(null,"",TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION,null,null));//为面板添加边框
        centerPanel.setLayout(new GridLayout(0,3));    //将面板添加到窗体的中间
        getContentPane().add(centerPanel,BorderLayout.CENTER);   //将面板添加到窗体的中间
       
        String[][] stochasticOrder=reorder();              //stochastic 随机的
        for(int row=0;row<3;row++){                            //遍历行
            for(int col=0;col<3;col++){                        //遍历列
                
                final JButton button=new JButton();      //创建拼图按钮对象
                button.setName(row+""+col);              //创建按钮的名称
                button.setIcon(new ImageIcon(stochasticOrder[row][col]));        //为按钮设置图片
                
                if(stochasticOrder[row][col].equals("imgs/00.jpg")){  //判断是否为空白按钮    
                    
                      emptyButton=button;
                }
                button.addActionListener(new ImgButtonAction());     //为按钮设置监听器
                centerPanel.add(button);                    //为按钮添加到拼图按钮面板中
            }
        }
        
        
        
    }
    
    
    //用来生成网格图片随机摆放顺序
    private String[][] reorder(){    //用来获取网格图片的随机摆放顺序
        String[][] exactnessOrder=new String[3][3];    //网格图片的正确拜访顺序       exactness正确顺序
        for(int row=0;row<3;row++){                                         //遍历行
            for(int col=0;col<3;col++){                                     //遍历列
                 exactnessOrder[row][col]="imgs/"+row+col+".jpg";
                 //exactnessOrder[row][col]=row+col+".jpg";
            }
        }
        
        String[][] stochasticOrder=new String[3][3];   //网格图片的随机拜访顺序
        for(int row=0;row<3;row++)         //遍历行
            for(int col=0;col<3;col++){                          //遍历列
                while(stochasticOrder[row][col]==null){
                    /*int r=(int)(Math.random()*3);         //取随机行
                    int c=(int)(Math.random()*3);         //取随机列
                    if(exactnessOrder[r][c]!=null){
                        stochasticOrder[row][col]=exactnessOrder[r][c];
                        exactnessOrder[r][c]=null;
                    }*/
                    /*if(row<1&col<2){
                        if(col==0)
                          stochasticOrder[row][col]=exactnessOrder[0][1];
                        if(col==1)
                            stochasticOrder[row][col]=exactnessOrder[0][0];
                    }else{
                         stochasticOrder[row][col]=exactnessOrder[row][col];
                    }*/
                    stochasticOrder[row][col]=exactnessOrder[col][row];
                }
            }
        return stochasticOrder;
    }
    
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
         try{
              MedleyGame frame=new MedleyGame();    //创建本类的对象
              frame.setVisible(true);               //设置窗体可见
         }catch(Exception e){
              e.printStackTrace();
         }
    }
    
    //拼图监听按钮,用来监听按钮的情况
    class ImgButtonAction implements ActionListener{    //拼图按钮监听器
        
         public void actionPerformed(ActionEvent e){
            
             String emptyName=emptyButton.getName();     //获得空白按钮的名字
             char emptyRow=emptyName.charAt(0);          //获得空白按钮所在的行
             char emptyCol=emptyName.charAt(1);          //获得空白按钮的列
            
             JButton clickButton=(JButton) e.getSource();    //获得被单击按钮对象
             String  clickName=clickButton.getName();        //获得被单击按钮的名称
            
             char clickRow=clickName.charAt(0);  //获得被单击按钮所在的行
             char clickCol=clickName.charAt(1);   //获得被单击按钮所在的列
            
             //判断被单击按钮与空白按钮是否相临
             if(Math.abs(clickRow-emptyRow)+Math.abs(clickCol-emptyCol)==1){
                 //将被单击按钮的图片移动到空白按钮上
                 emptyButton.setIcon(clickButton.getIcon());
                
                 //设置被单击的按钮显示空白图片
                 clickButton.setIcon(new ImageIcon("imgs/00.jpg"));
                 emptyButton=clickButton;    //将被单击的按钮设置为空白按钮
                
             }
            
         }
        
    }
    
    //编写"下一句"按钮的监听器类
    class StartButtonAction implements ActionListener{
        public void actionPerformed(ActionEvent e){
            
             String[][]  stochasticOrder=reorder();   //获得网格图片的随机拜访顺序
             int i=0;                                //拼图按钮在拼图按钮面板中的索引
            
             for(int row=0;row<3;row++){             //遍历行
                 for(int col=0;col<3;col++){         //遍历列
                    
                      JButton button=(JButton)centerPanel.getComponent(i++);
                      button.setIcon(new ImageIcon(stochasticOrder[row][col]));
                      if(stochasticOrder[row][col].equals("imgs/00.jpg")){
                            emptyButton=button;
                      }
                      
                 }
             }
            
         }
    }

}





















































































































































































































































以上是关于Java swing的主要内容,如果未能解决你的问题,请参考以下文章

老Java程序员谈谈swing要不要学

Java Switch

Java Math

Java 布尔运算

java [Java] Java常用代码#java

Java - 35 Java 实例