一、团队课程设计博客链接

http://www.cnblogs.com/sakurai3104/p/7063125.html

二、个人负责模块或任务说明

  • 我主要负责主运行界面和跳转弹窗界面的设计
  • 解决了少部分主代码运行上的问题

三、个人代码提交记录截图

  • 由于编写代码的个人电脑没法连网,所以代码都是下午回宿舍之后上传的。且是一次性上传,所以这边只有三个显示,但是每次上传基本有两个及以上的类。

四、自己负责模块或任务详细说明

  • 首先是界面上的按钮的设计,定义属性,注册监听器什么的。这一部分也没什么技术含量,就是一个复制粘贴的过程

  • 然后是事件监听器部分。这一部分主要是增加了一个弹窗。int m =JOptionPane.showOptionDialog(null,"重新选择对战模式","重新开始",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,options,options[0]);主要是使用JAVA自带的JOptionPane中的方法,产生一个多项选择框,通过返回值m来获取具体选则的是哪一个选项,从而进行下一步的变化。代码很精简,主要就是这一句,但是这就影响了其他功能。比如说字体不好看,界面有点小的问题。我查阅了API文档,发现如果要使用这样集成好的代码,就没法对字体修改属性。只能用内嵌按钮的方式来进行。但如果这样的话,前面的就要作废,考虑到时间问题,还是没有选择修改。

  • 本来界面设计是想写在一个类里的,后来考虑了一下还是又加了一个类。主要原因也是上面差不多,能更好的对弹窗进行修改

  • 另外关于主程序,由于存在切换上的bug。一开始是以为界面和人机对战及人人对战的代码融合问题。所以由我负责修改,但是后面发现时一个运行的逻辑顺序问题

  • 最后是关于绘制的问题。因为棋子的绘制以前是从来不会的,所以这个部分就从网上找到了参考代码,经过测试,基本明白了代码的作用,以及知道了Graphics2D类可以用来做图像的处理

  • ((Graphics2D) g).setRenderingHint(); 消除线段的锯齿状边缘


               , new Color[]{Color.WHITE, Color.BLACK});```
 ```((Graphics2D) g).setPaint(paint);```绘制棋子,加上高光效果
![](http://images2015.cnblogs.com/blog/1109779/201706/1109779-20170622090956538-95421616.png)



##五、课程设计总结与感想

###1.
	 super.paintComponent(g);
//画棋盘  是父类JPanel里的方法,会把整个面板用背景色重画一遍,起到清屏的作用。在swing控件中,paint方法会依次调用paintcomponent,paintborder,painchildren方法,后两者一般默认即可,所以swing编程时,如果继承jcomponent或者其子类,要覆盖paintcomponente而不是paint方法

### 2.
	img=Toolkit.getDefaultToolkit().getImage("C:\\Users\\CL\\Desktop\\timg.jpg");  
设置顶层容器的大小或位置
因为是抽象类,所以不能用new 实例化,可以用getDefaultToolkit返回Toolkit类的对象
例如: Toolkit toolkit=Toolkit.getDefaultToolkit();

###3.处理图片为半透明
	   
   		public void byEachPixel(Graphics dst,ImageIcon icon,inx,int y,int alpha){
	   
	   BufferedImage bir = new BufferedImage(icon.getIconWidth(),icon.getIconHeight(),BufferedImage.TYPE_INT_ARGB);
	   Graphics2D birg2d = bir.createGraphics();
	   birg2d.drawImage(icon.getImage(), 0, 0, icon.getImageObserver());

	   for(int i=bir.getMinX();i<bir.getWidth();i++){
	   for(int j=bir.getMinY();j<bir.getHeight();j++){
	   //System.out.println(bir.getRGB(i, j));
	   int rgb = bir.getRGB(i, j);
	   if((rgb&0xff000000)!=0x00000000){
	   rgb = (alpha<<24)|(rgb&0x00ffffff);
	   }
	   bir.setRGB(i, j, rgb);
	   }
	   }

	   dst.drawImage(bir, x, y, this);
	   } 
   
###4.设置画线

	  ((Graphics2D) g).setStroke(new BasicStroke(2.0f));//设置线的粗细
关于划线,drawImage是Graphics类的一个方法

###5.弹窗
showOptionDialog函数

	Object[] options={"人机对战","人人对战"};
              int m =JOptionPane.showOptionDialog(null,"重新选择对战模式","重新开始",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,options,options[0]);

###6.监听器
	ActionListener接口继承自EventListener
对处理操作时间感兴趣的类可以实现此接口,而使用该类创建的对象可使用组件的addActionListener方法向该组件注册。在发生操作事件时,调用该对象的actionPerformed方法

###7.对JFrame添加组件
- 用getContenPane()方法获得JFame的内容面板,再对其加入组件:frame.getContenPane(),add(childComponent)
- 建立一个Jpanel或JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板
	JpanelcontentPane=new Jpanel();//把其他组件添加到Jpanel中
	frame.setContentPane(contentPane);//把contentPane对象设置为frame的内容面板

###8.修改属性
	 //确定按钮  
	JButton btnYes = new JButton("可以了哦");
	btnYes.setFont(new Font("幼圆", Font.BOLD, 16));
	btnYes.setForeground(Color.MAGENTA);
	// 否定按钮
	JButton btnNo = new JButton("不行不行");
	btnNo.setFont(new Font("幼圆", Font.ITALIC, 18));
	btnNo.setForeground(Color.PINK);
	// 按钮选项加入数组
	Object[] options = { btnYes, btnNo };
	// 文本内容
	JLabel label = new JLabel("我是加入了Label和JButton的Dialog这样可以吗?");
	label.setForeground(Color.ORANGE);
	label.setFont(new Font("宋体", Font.ITALIC, 16));
	// 显示
	DialogJOptionPane.showOptionDialog(null, label, "标题", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE,null, options, options[0]);

####方法二

	// 设置按钮显示效果
	UIManager.put("OptionPane.buttonFont", new FontUIResource(new Font("宋体", Font.ITALIC, 13)));
	// 设置文本显示效果
	UIManager.put("OptionPane.messageFont", new FontUIResource(new Font("宋体", Font.ITALIC, 13)));
	JOptionPane.showMessageDialog(null, "我是用UIManager设置过的Dialog");

###9.感想
- 感觉团队形式的课程设计对于部分能力较弱的同学来说比较友好。在有分工的情况下,可以专攻一个方向,学习起来会更快速。
- 但是也存在一个“磨合”问题。由于团队两人的代码书写习惯,以及沟通方面,使得代码在交换的过程中存在不同步等问题。
- 因为五子棋的这个小程序开发,存在人人和人机对战的情况,在界面跳转和原对战模式的融合存在很大问题。两人的代码需要不断的进行交流和变更、一个好的交流必不可少。
- 自己的电脑无线网卡有点问题,导致在机房实验的时候,电脑没法联网,只能通过U盘来进行代码传输,比较不方便。码云的上传都是在回到宿舍之后进行的,这就很伤,没有起到代码托管和团队开发的真正作用。
posted on 2017-06-22 08:33  谷LL  阅读(376)  评论(0编辑  收藏  举报