高分再问 本人想做一个绘图程序,主要功能是:自定义一些组件,比如“直线”、“方块”,供用户在画板上进行拖放、绘图。这些“直线”、“方块”不需要有缩放功能,只需提供所在位置的坐标即可。 本人找不到相关资料,在此请教达人!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 都是触发事件(MouseClick,MouseMove etc.)后进行一些对应画图逻辑操作 比如拖放矩形 只要确定对角两点就可绘制 鼠标第一次点下即确定第一点 接着的拖放过程是一个不断擦除重绘的过程 直至鼠标松开定型 只需提供所在位置的坐标即可。 是指用户提供坐标给程序,让程序在那个坐标开始画图,还是程序得到用户放图形的位置?如果是这两种的话,好像有个location(可能是postion)相关的功能吧 找不到资料? API里面可是有你要做的程序的所有关键方法. 多看一下java.awt.Graphics的Api,相信对你有帮助 希望可以提供帮助import javax.swing.JPanel;import java.util.ArrayList;import javax.swing.JButton;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.geom.GeneralPath;import java.awt.Point;import javax.swing.JFrame;public class TestPanel extends JPanel{ boolean isStart = false; ArrayList points = new ArrayList(); JButton button = new JButton("開始"); public TestPanel() { setLayout(new java.awt.BorderLayout()); button.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { buttonAction(); } }); add(button,java.awt.BorderLayout.NORTH); addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { if(isStart) points.add(evt.getPoint()); repaint(); } }); } public void buttonAction(){ isStart = true; this.points.clear(); button.setText("清除"); this.repaint(); } public void paint(Graphics g){ super.paint(g); if(points.size()<2){ return ; } Graphics2D g2d = (Graphics2D) g; GeneralPath path = new GeneralPath(); Point p = (Point) points.get(0); path.moveTo((float)p.getX(),(float)p.getY()); for(int i = 1; i<points.size();i++){ p = (Point) points.get(i); path.lineTo((float)p.getX(),(float)p.getY()); } g2d.draw(path); } public static void main(String arg[]){ JFrame frame = new JFrame(); frame.setLayout(new java.awt.BorderLayout()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new TestPanel(),java.awt.BorderLayout.CENTER); frame.setSize(600,600); frame.setVisible(true); }} lucene多域查询问题 java编译问题 帮忙看看这段代码.... 关于线程自动销毁的问题 java中有没有关于矩阵的计算的方法或是。。。。。。。。? java中的unicode 和gb2312之间的转化。 java里如何控制格式化字符串 搜索引擎的实现和算法 SCWCD@Whiz的注册工具那里有谢谢了。 关于JAVA的打印问题 FileInputStream 和 FileReader的区别 java socks5
比如拖放矩形 只要确定对角两点就可绘制 鼠标第一次点下即确定第一点 接着的拖放过程
是一个不断擦除重绘的过程 直至鼠标松开定型
是指用户提供坐标给程序,让程序在那个坐标开始画图,还是程序得到用户放图形的位置?如果是这两种的话,好像有个location(可能是postion)相关的功能吧
API里面可是有你要做的程序的所有关键方法.
import javax.swing.JPanel;
import java.util.ArrayList;
import javax.swing.JButton;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.GeneralPath;
import java.awt.Point;
import javax.swing.JFrame;public class TestPanel extends JPanel{
boolean isStart = false;
ArrayList points = new ArrayList();
JButton button = new JButton("開始"); public TestPanel() {
setLayout(new java.awt.BorderLayout());
button.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
buttonAction();
}
});
add(button,java.awt.BorderLayout.NORTH);
addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
if(isStart)
points.add(evt.getPoint());
repaint();
}
});
} public void buttonAction(){
isStart = true;
this.points.clear();
button.setText("清除");
this.repaint();
} public void paint(Graphics g){
super.paint(g);
if(points.size()<2){
return ;
}
Graphics2D g2d = (Graphics2D) g;
GeneralPath path = new GeneralPath();
Point p = (Point) points.get(0);
path.moveTo((float)p.getX(),(float)p.getY());
for(int i = 1; i<points.size();i++){
p = (Point) points.get(i);
path.lineTo((float)p.getX(),(float)p.getY());
}
g2d.draw(path);
} public static void main(String arg[]){
JFrame frame = new JFrame();
frame.setLayout(new java.awt.BorderLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPanel(),java.awt.BorderLayout.CENTER);
frame.setSize(600,600);
frame.setVisible(true);
}}