JAVA简单画图板的实现

Java中边框布局:
1.把窗口分成5个区域:北、南、东、西、中 每个区域最多只能可以包含一个组件 (如果想把窗口分的更多 可以再其中一个区域上添加面板 面板上再添加组件)
2.NORTH 和 SOUTH 组件可以在水平方向上拉伸;而 EAST 和 WEST 组件可以在垂直方向上拉伸;CENTER 组件可同时在水平和垂直方向上拉伸,从而填充所有剩余空间。(例子中的panelcenter的大小没有意义,panelleft的height和panelbottom的width没有意义)

Java中单选按钮:
1.通过ButtonGroup对象 给多个单选按钮进行逻辑分组
2.当多个JRadioButton共用一个事件监听器的时候,如何获取产生事件的按钮?(Java中获得
ButtonGroup选项的方法)
  a.在画图板主类中每个单选按钮对象调用setActionCommand();方法 设置唯一的动作命令
     eg:JRadioButton btn1 = new JRadioButton("直线");
        btn1.setActionCommand("line");//设置唯一标识
  b.按钮组对象调用getSelection();方法 获得被选中的按钮模型
    eg:ButtonGroup group = new ButtonGroup();
       ButtonModel model = group.getSelection();
  c.ButtonMode对象调用getActionCommand();获得动作命令
     eg:String str = model.getActionCommand();
  d.通过str的值来进行区分鼠标选中的是哪个按钮
  (步骤2和3可以合并 String str=group.getSelection().getActionComman();)
   方法说明:
         void setActionCommand(String s)//设置按钮及其模型的动作命令
         ButtonModel getSelection()   //返回被选择的按钮的按钮模型
         String getActionCommand()      //返回该按钮的动作命令字符串

Java中不同类里共享私有变量可以通过构造方法来实现

    新手一只,请多指教!  
DrawUI
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

public class DrawUI {
public static void main(String[] args) {
JFrame jf=new JFrame();
jf.setSize(600, 500);
jf.setTitle("画图板");
jf.setDefaultCloseOperation(3);

         //指定窗口布局为边框布局
BorderLayout layout=new BorderLayout();
jf.setLayout(layout);

//添加一个用来绘图的面板
JPanel panelleft=new JPanel();
panelleft.setBackground(Color.blue);
           //设置大小
Dimension dimleft=new Dimension(100,1);
panelleft.setPreferredSize(dimleft);

JPanel panelcenter=new JPanel();
panelcenter.setBackground(Color.gray);
//中间组件大小没有意义
// Dimension dimcenter=new Dimension(1,1);
// panelcenter.setPreferredSize(dimcenter);

JPanel panelbottom=new JPanel();
panelbottom.setBackground(Color.green);
Dimension dimbottom=new Dimension(1,100);
panelbottom.setPreferredSize(dimbottom);

//把面板添加到窗口中,指定放的位置【东西南北中】
jf.add(panelleft,BorderLayout.WEST);
jf.add(panelcenter,BorderLayout.CENTER);
jf.add(panelbottom,BorderLayout.SOUTH);
  
//*********************给左边的面板添加形状选择工具***********************//
//按钮组对象,给单选按钮进行逻辑分组
ButtonGroup  group =new ButtonGroup();

JRadioButton button1=new JRadioButton("直线");
panelleft.add(button1);//加在左边面板上
group.add(button1);//添加分组
button1.setActionCommand("line");//设置唯一标识
button1.setSelected(true);//设置默认选中 避免出现空指针的错误

JRadioButton button2=new JRadioButton("矩形");
panelleft.add(button2);
group.add(button2);
button2.setActionCommand("rect");

JRadioButton button3=new JRadioButton("椭圆");
panelleft.add(button3);
group.add(button3);
button3.setActionCommand("oval");

//*****************给中间的面板添加绘图面板***************************//

JPanel  drawpanel=new JPanel();
Dimension drawdim=new Dimension(400,300);
drawpanel.setPreferredSize(drawdim);
drawpanel.setBackground(Color.white);

//流式布局是添加在中间面板上的
//面板默认的布局为流式布局
//指定中间面板的布局为流式布局左对齐
FlowLayout  drawlayout =new FlowLayout(FlowLayout.LEFT);
panelcenter.setLayout(drawlayout);
panelcenter.add(drawpanel);
//********************给底部的面板添加颜色选择工具***********************//

jf.setVisible(true);

//由于是绘制在drawpanel上的,所以只需要给drawpanel添加鼠标监听器
DrawListener listener=new DrawListener(drawpanel, group);
//给面板添加鼠标监听器
drawpanel.addMouseListener(listener);
 
}
}
DrawListener

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
import javax.swing.JPanel;

public class DrawListener  implements MouseListener {
          private int x1,x2,y1,y2;
          private Graphics g;
          private JPanel drawpanel;
          private ButtonGroup group;
          private String str="line";//初始化避免出现空指针的错误

       //通过构造方法实现不同类中私有变量的共享  
         public DrawListener(JPanel drawpanel1,ButtonGroup group1){
           drawpanel=drawpanel1;
           group=group1;
            }
      
  public void mousePressed(MouseEvent e) {
               // 鼠标按下准备绘制图形的时候先获取能绘制的区域[画布]
   // 获取drawPanel在屏幕上占据的区域,作为可以改变颜色的区域
   g=drawpanel.getGraphics();

// 鼠标按下准备绘制的时候来确定要绘制的图形
// 获得被选中的按钮模型
   ButtonModel model=group.getSelection();

// 获得动作命令[每一个按钮的唯一标识]
   str=model.getActionCommand();
   // str=group.getSelection().getActionCommand();
   x1=e.getX();
   y1=e.getY();   
}
public void mouseReleased(MouseEvent e) {
  x2=e.getX();
  y2=e.getY();

  // 绘制图形
  if(str.equals("line")){
  g.drawLine(x1, y1, x2, y2);  
  }
  else if(str.equals("rect")){
  int x=x1<x2?x1:x2;
  int y=y1<y2?y1:y2;
  int width=x1<x2?x2-x1:x1-x2;
      int height=y1<y2?y2-y1:y1-y2;
      g.drawRect(x, y, width, height);
  }
  else if(str.equals("oval")){
  int x=x1<x2?x1:x2;
  int y=y1<y2?y1:y2;
  int width=x1<x2?x2-x1:x1-x2;
      int height=y1<y2?y2-y1:y1-y2;
      g.drawOval(x, y, width, height);   
  }
 
}

public void mouseClicked(MouseEvent e) {

}
public void mouseEntered(MouseEvent e) {

}
public void mouseExited(MouseEvent e) {

}

}

猜你喜欢

转载自liuyuan418921673.iteye.com/blog/2249526
今日推荐