包装测试;
导入 java.awt.*;
导入 java.awt.event.*;
导入 java.awt.geom.Ellipse2D;
导入 java.awt.image.BufferedImage;
导入 javax.swing.*;
公共类 test_bmp 扩展 JPanel 实现 MouseListener,MouseMotionListener,ActionListener
{
静态 BufferedImage 图像;
颜色颜色;
点开始=新点();
点结束 =new Point();
JButton 椭圆=新 JButton("椭圆");
JButton 矩形=新 JButton("矩形");
JButton line=new JButton("Line");
选择字符串;
公共 test_bmp()
{
颜色=颜色.黑色;
setBorder(BorderFactory.createLineBorder(Color.black));
addMouseListener(this);
addMouseMotionListener(this);
}
公共无效paintComponent(图形g)
{
//super.paintComponent(g);
g.drawImage(图像, 0, 0, 这个);
Graphics2D g2 = (Graphics2D)g;
g2.setPaint(Color.black);
如果(选择==“椭圆”)
{
g2.drawOval(start.x, start.y, (end.x-start.x),(end.y-start.y));
System.out.println("开始:"+start.x+","+start.y);
System.out.println("结束:"+end.x+","+end.y);
}
如果(选择==“行”)
g2.drawLine(start.x,start.y,end.x,end.y);
}
//在缓冲图像上绘制
公共无效绘制()
{
Graphics2D g2 = image.createGraphics();
g2.setPaint(颜色);
System.out.println("画");
如果(选择==“行”)
g2.drawLine(start.x, start.y, end.x, end.y);
如果(选择==“椭圆”)
{
g2.drawOval(start.x, start.y, (end.x-start.x),(end.y-start.y));
System.out.println("开始:"+start.x+","+start.y);
System.out.println("结束:"+end.x+","+end.y);
}
重绘();
g2.dispose();
}
公共JPanel addButtons()
{
JPanel 按钮面板=新 JPanel();
buttonpanel.setBackground(color.lightGray);
buttonpanel.setLayout(new BoxLayout(buttonpanel,BoxLayout.Y_AXIS));
elipse.addActionListener(this);
矩形.addActionListener(this);
line.addActionListener(this);
buttonpanel.add(椭圆);
buttonpanel.add(Box.createRigidArea(new Dimension(15,15)));
buttonpanel.add(矩形);
buttonpanel.add(Box.createRigidArea(new Dimension(15,15)));
buttonpanel.add(line);
返回按钮面板;
}
公共静态无效主(字符串参数 [])
{
test_bmp 应用程序=新的 test_bmp();
//主窗口
JFrame frame=new JFrame("白板");
frame.setLayout(new BorderLayout());
frame.add(application.addButtons(),BorderLayout.WEST);
框架。添加(应用程序);
//窗口大小
frame.setSize(600,400);
frame.setLocation(0,0);
frame.setVisible(true);
int w = frame.getWidth();
int h = frame.getHeight();
image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = image.createGraphics();
g2.setPaint(Color.white);
g2.fillRect(0,0,w,h);
g2.dispose();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@覆盖
公共无效mouseClicked(MouseEvent arg0){
// TODO 自动生成的方法存根
}
@覆盖
公共无效鼠标输入(鼠标事件 arg0){
// TODO 自动生成的方法存根
}
@覆盖
公共无效mouseExited(MouseEvent arg0){
// TODO 自动生成的方法存根
}
@覆盖
public void mousePressed(MouseEvent 事件)
{
开始 = event.getPoint();
}
@覆盖
public void mouseReleased(MouseEvent 事件)
{
结束 = event.getPoint();
画();
}
@覆盖
公共无效鼠标拖动(鼠标事件e)
{
结束=e.getPoint();
重绘();
}
@覆盖
公共无效鼠标移动(鼠标事件 arg0){
// TODO 自动生成的方法存根
}
@覆盖
公共无效actionPerformed(ActionEvent e)
{
如果(e.getSource()==椭圆)
选择=“椭圆”;
如果(例如getSource()==线)
选定="行";
画();
}
}
我需要创建一个绘画应用程序。当我通过从左到右拖动鼠标来绘制椭圆时,它什么也不显示。为什么?我应该在这里使用任何其他功能吗?