标题:功能实现不了
只看楼主
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 

刚写了个简单的例子,
你看看吧你自己试着改进看看

/*
* TestDraw.java
*
* Created on 2006年11月29日, 上午9:35
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

/**
*
* @author lbf
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class TestDraw extends JFrame implements ActionListener{
private JRadioButton jr1,jr2,jr3,jr4;
private int drawWhat=Const.DRAW_LINE;
private int startX,startY,endX,endY;
/** Creates a new instance of TestDraw */
public TestDraw() {
initWindow();
}
private void initWindow(){
JPanel jrPanel=new JPanel();
DrawPanel dp=new DrawPanel();
jrPanel.add(jr1=new JRadioButton("任意线段",true));
jrPanel.add(jr2=new JRadioButton("画直线"));
jrPanel.add(jr3=new JRadioButton("画椭圆"));
jrPanel.add(jr4=new JRadioButton("画矩形"));
ButtonGroup bg=new ButtonGroup();
bg.add(jr1);
bg.add(jr2);
bg.add(jr3);
bg.add(jr4);
jr1.addActionListener(this);
jr2.addActionListener(this);
jr3.addActionListener(this);
jr4.addActionListener(this);
dp.setBorder(BorderFactory.createTitledBorder("画图区"));
jrPanel.setBorder(BorderFactory.createTitledBorder("选择区"));
this.getContentPane().add(jrPanel,BorderLayout.SOUTH);
this.getContentPane().add(dp,BorderLayout.CENTER);
this.setSize(400,500);
this.setLocationRelativeTo(null);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent ae){
if(ae.getSource()==jr1){
drawWhat=Const.DRAW_LINE;
} else if(ae.getSource()==jr2){
drawWhat=Const.DRAW_LINE_TO;
}else if(ae.getSource()==jr3){
drawWhat=Const.DRAW_OVAL;
}else if(ae.getSource()==jr4){
drawWhat=Const.DRAW_RECT;
}
}
private class DrawPanel extends JPanel implements MouseListener,MouseMotionListener{

public DrawPanel(){
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
public void mouseEntered(MouseEvent me){

}
public void mouseExited(MouseEvent me){

}
public void mousePressed(MouseEvent me){
startX=me.getX();
startY=me.getY();
endX=me.getX();
endY=me.getY();
}
public void mouseClicked(MouseEvent me){

}
public void mouseReleased(MouseEvent me){
endX=me.getX();
endY=me.getY();
repaint();
}
public void mouseMoved(MouseEvent me){

}
public void mouseDragged(MouseEvent me){
if(drawWhat==Const.DRAW_LINE){
startX=endX;
startY=endY;
}
endX=me.getX();
endY=me.getY();
repaint();
}
public void paintComponent(Graphics g){
if(drawWhat==Const.DRAW_LINE){
g.drawLine(startX,startY,endX,endY);
} else if(drawWhat==Const.DRAW_OVAL){
super.paintComponent(g);
g.drawOval(startX,startY,endX-startX,endY-startY);
}else if(drawWhat==Const.DRAW_RECT){
super.paintComponent(g);
g.drawRect(startX,startY,endX-startX,endY-startY);
}else if(drawWhat==Const.DRAW_LINE_TO){
super.paintComponent(g);
g.drawLine(startX,startY,endX,endY);
}
}
}
protected static class Const{
public static final int DRAW_LINE=1;
public static final int DRAW_OVAL=2;
public static final int DRAW_RECT=3;
public static final int DRAW_LINE_TO=4;
}
public static void main(String[] args) {
new TestDraw();
}
}


可惜不是你,陪我到最后
2006-11-29 10:08
yqfang310
Rank: 2
等 级:新手上路
威 望:4
帖 子:458
专家分:0
注 册:2006-10-10
得分:0 
谢谢,我看一下吧

JAVA是什么?我也不清楚......
2006-11-29 12:30
yqfang310
Rank: 2
等 级:新手上路
威 望:4
帖 子:458
专家分:0
注 册:2006-10-10
得分:0 
可是每次画完,再画时,先前画的怎么就没有了?

JAVA是什么?我也不清楚......
2006-11-29 12:33
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 

因为我调用了super.paintComponent方法
否则的话,就会出现一片,很难看的


可惜不是你,陪我到最后
2006-11-29 12:52
禹_二
Rank: 1
等 级:新手上路
帖 子:661
专家分:0
注 册:2006-9-13
得分:0 
还是版主厉害,经验丰富!

2006-11-29 16:25
myfor
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:357
专家分:6
注 册:2006-3-13
得分:0 

鼠标拖拽完之后的图怎么保留下来呢?


广告位招租
2006-11-29 17:14
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
你可以把它放到JAVA的任何一个数据结构里面去

可惜不是你,陪我到最后
2006-11-29 17:14
myfor
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:357
专家分:6
注 册:2006-3-13
得分:0 
我是说保留前一个图之后 然后在此基础上继续画图

广告位招租
2006-11-29 17:24
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 

这就需要你自定义一些类来实现了
你可以定义一个类叫Oval,它可以保存椭圆的一些数据
也可以定义一个类叫Line,它可以保存线的数据
如此这般,就可以了,
然后把它们都存到一个集合里去
画的时候,全部取出来,再调用它们的drawSelf方法,当然这个方法是你先定义好了的
这样就是多态的实现


可惜不是你,陪我到最后
2006-11-29 17:28
myfor
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:357
专家分:6
注 册:2006-3-13
得分:0 

收到 ! 多谢!


广告位招租
2006-11-29 18:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-105929-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020719 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved