Java图形界面的应用

一、背景分析

       运用java的基本组件JFrame、JPanel和JButton配置模块,图形界面的变化及显示派生于JPanel的CirclePanel类,用于专门提供变化和显示的方法,按键设置监听模块派生于KeyAdapter的KeyListener类。

       界面展示如下图:

       按键意义:左侧主键盘区,点击按键E使左方圆半径增大,点击按键S使右方圆半径减小;右侧小键盘区,点击向上键使右方圆半径增大,点击向下键使左方圆半径减小。

 

二、代码实现

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;  //包含头文件

public class ControlCircle extends JFrame{  //定义类ControlCircle,并继承于JFrame
	protected JButton start;
	protected CirclePanel cpnl1;
	protected CirclePanel cpnl2;
	
	public ControlCircle(){  //参数表为空的构造方法 
		start=new JButton("Start(Left E:enlarge,S:shrink ; Right ↑:enlarge,↓:shrink)");
		cpnl1 = new CirclePanel();
		cpnl2 = new CirclePanel();
		
		JPanel pnl = new JPanel();
		pnl.add(start);  //将JButton放入JPanel容器中
		
		JPanel temp=new JPanel(new GridLayout(1,2));
		temp.add(cpnl1);
		temp.add(cpnl2);  //分别将两个圆圈放入JPanel容器中

		this.add( pnl, BorderLayout.SOUTH );
		this.add( temp, BorderLayout.CENTER );
		
		  start.addKeyListener( new keyListener() );  //调用键盘监听器方法
	}

	public void getUsername(){
		cpnl1.getUsername("left");
		cpnl2.getUsername("right");
	}
	
    class keyListener extends KeyAdapter{  //内部类,继承于KeyAdapter,对监听器进行设置
			public void keyPressed(KeyEvent e) {
				if (e.getKeyCode() == KeyEvent.VK_E) {  //方法对监听到的事件进行处理
					cpnl1.enlarge();
					System.out.println("circle1 enlarge");
				}
				else if(e.getKeyCode() == KeyEvent.VK_S){
					cpnl2.shrink();
					System.out.println("circle2 shrink");  //方便查看运行结果
				}
				else if(e.getKeyCode() == KeyEvent.VK_UP){
					cpnl2.enlarge();
					System.out.println("circle2 enlarge");
				}
				else if(e.getKeyCode() == KeyEvent.VK_DOWN){
					cpnl1.shrink();
					System.out.println("circle1 shrink");
				}

				if(cpnl1.judge()){  //设置对两个圆的半径进行判断,使得程序结束
					JOptionPane.showMessageDialog(start,cpnl1.userName+" is winner");
					System.exit(0);
				}
				else if(cpnl2.judge()){
					JOptionPane.showMessageDialog(start,cpnl2.userName+" is winner");
					System.exit(0);
				}
			}
	}
	
	class CirclePanel extends JPanel{  //内部类,实现对两个圆圈的展示和半径控制

		public String userName;
		private int radius = 1;

		protected void paintComponent( Graphics g ){
			super.paintComponent( g );
			g.drawOval( getWidth() / 2 - radius, getHeight() / 2 - radius, 2 * radius, 2 * radius );
		}
		
		public void enlarge(){
			radius++;
			repaint();
		}
		
		public void shrink(){
			if( radius > 0 )
				radius--;
			repaint();
		}

		public void getUsername(String loc){
			userName=JOptionPane.showInputDialog("Enter the "+loc+" circle's userName:");
		}

		public boolean judge(){
			if(radius>=50){return true;}
			return false;
	    }
    }

	public static void main( String[] args ){  //主函数,实例化对象frame
		JFrame frame = new ControlCircle();
		frame.setTitle( "ControlCircleClient" );
		frame.setSize( 400, 300 );
		frame.setLocationRelativeTo( null );
		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		frame.setVisible( true );
		((ControlCircle)frame).getUsername();
	}
}

       当KeyListener监听到按键事件KeyEvent.VK_E,调用cpnl1的enlarge()方法;监听到按键事件KeyEvent.VK_S,调用cpnl2的shrink()方法;up和down键盘区同理。

       每次KeyListener被触发,都要调用两个圆形的judge()方法,用于判断是否有圆达成判断条件。若if成立,则执行System.exit(0);,并弹出提示对话框。

 

三、程序运行测试

 

四、总结

       关于Java的图形用户界面,首先要了解两个包AWT和Swing,最为重要的是掌握包中的多种组件,其次是掌握容器与组件的关系,所有的组件必须包含在某个容器中,最后通过各个组件的不同特点完成布局。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值