JAVA课程设计

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

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

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

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

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

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

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

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

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

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

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

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

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

1109779-20170622090901273-319177528.png
1109779-20170622090951023-676908271.png

RadialGradientPaint paint = new RadialGradientPaint(xPos-Point.DIAMETER/2+25, yPos-Point.DIAMETER/2+10, 20, new float[]{0f, 1f} , new Color[]{Color.WHITE, Color.BLACK});
((Graphics2D) g).setPaint(paint);绘制棋子,加上高光效果
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盘来进行代码传输,比较不方便。码云的上传都是在回到宿舍之后进行的,这就很伤,没有起到代码托管和团队开发的真正作用。

转载于:https://www.cnblogs.com/ycll/p/7063034.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值