要用Swing达到一个效果,帮忙出出主意 在Swing界面中,有2个椭圆。当发生一个事件以后,这二个椭圆会用一根曲线连接起来。问题出来了,怎么做出来这条曲线是2个椭圆距离最近的曲线。这个怎么做出来啊另外一个就是这条曲线上,有2个点,就是平分这条曲线三段。这个点可以拖拽,曲线的形状就会变化不知道高手们有什么好的意见吗 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第一个问题, 对椭圆不熟, 不知道怎么做, 这个应该要看椭圆的相应特性了。另外一个就是这条曲线上,有2个点,就是平分这条曲线三段。这个点可以拖拽,曲线的形状就会变化。。1. 对用来画之个图形的组件, 如JPanel增加鼠标事件处理: addMouseListener和addMouseMotionListener2. 画两个小四边形(Rectangle)在这2个点处, 大小随意,宽跟高为2, 3, 4等都可试试, 找出最太平间的来, 用来处理拖拽。3. 当鼠标按下后, 检查鼠标的坐标是否在这2个小四边形中的某一个内。4. 如果在, 那么当鼠标被拖动时, 修改被拖动的小四边形的坐标, 也同时去计算修改那条曲线的数据, 重绘。 正解。偶都几年没有用swing啦,都忘记光啦。嘻嘻! 看懂上面的思路, 这个程序就不用注释了import java.awt.*;import java.awt.geom.*;import java.awt.event.*;import javax.swing.*;public class RectDragged extends JPanel { private Rectangle2D rect1; private Rectangle2D rect2; private boolean mouseInRect1 = false; private boolean mouseInRect2 = false; public RectDragged() { rect1 = new Rectangle2D.Float(20, 20, 8, 8); rect2 = new Rectangle2D.Float(60, 20, 8, 8); this.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { if (rect1.contains(e.getPoint())) { mouseInRect1 = true; } else if (rect2.contains(e.getPoint())) { mouseInRect2 = true; } } @Override public void mouseReleased(MouseEvent e) { mouseInRect1 = false; mouseInRect2 = false; } }); this.addMouseMotionListener(new MouseAdapter() { @Override public void mouseDragged(MouseEvent e) { if (mouseInRect1) { rect1.setFrame(e.getX(), e.getY(), rect1.getWidth(), rect1 .getHeight()); RectDragged.this.repaint(); } if (mouseInRect2) { rect2.setFrame(e.getX(), e.getY(), rect2.getWidth(), rect2 .getHeight()); RectDragged.this.repaint(); } } }); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; g2d.setColor(Color.RED); g2d.fill(rect1); g2d.setColor(Color.GREEN); g2d.fill(rect2); } private static void createGUIAndShow() { JFrame frame = new JFrame(); RectDragged rd = new RectDragged(); frame.getContentPane().add(rd); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500, 500); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { RectDragged.createGUIAndShow(); } }); }} 给的代码这个地方有错误this.addMouseMotionListener(new MouseAdapter() { 错误--------------------配置: <默认>--------------------C:\RectDragged.java:35: 方法未覆盖其父类的方法 @Override ^C:\RectDragged.java:34: 无法将 java.awt.Component 中的 addMouseMotionListener(java.awt.event.MouseMotionListener) 应用于 (<匿名 java.awt.event.MouseAdapter>) this.addMouseMotionListener(new MouseAdapter() { ^2 错误处理已完成。 呵呵,我用的是JDK6.10, 如果你的环境下不行, 则改成: this.addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(MouseEvent e) { if (mouseInRect1) { rect1.setFrame(e.getX(), e.getY(), rect1.getWidth(), rect1 .getHeight()); RectDragged.this.repaint(); } if (mouseInRect2) { rect2.setFrame(e.getX(), e.getY(), rect2.getWidth(), rect2 .getHeight()); RectDragged.this.repaint(); } } }); 如何知道哪些类调用了某个类的方法 yahoo自动登录求救: 想自动登录www.flickr.com 然后上传图片 关于灰色框的问题 错误 如何处理这种不规则的日期数据? 各位帮帮忙啊!!! 怎样让一个java程序不被关闭? .equals()的问题,不知道怎么解决? DataSource的问题 什么时候开始使用JBuilder laf 的问题 现在搞J2SE C/S模式开发的人多吗?
1. 对用来画之个图形的组件, 如JPanel增加鼠标事件处理: addMouseListener和addMouseMotionListener
2. 画两个小四边形(Rectangle)在这2个点处, 大小随意,宽跟高为2, 3, 4等都可试试, 找出最太平间的来, 用来处理拖拽。
3. 当鼠标按下后, 检查鼠标的坐标是否在这2个小四边形中的某一个内。
4. 如果在, 那么当鼠标被拖动时, 修改被拖动的小四边形的坐标, 也同时去计算修改那条曲线的数据, 重绘。
正解。
偶都几年没有用swing啦,都忘记光啦。嘻嘻!
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;public class RectDragged extends JPanel { private Rectangle2D rect1;
private Rectangle2D rect2;
private boolean mouseInRect1 = false;
private boolean mouseInRect2 = false; public RectDragged() {
rect1 = new Rectangle2D.Float(20, 20, 8, 8);
rect2 = new Rectangle2D.Float(60, 20, 8, 8); this.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
if (rect1.contains(e.getPoint())) {
mouseInRect1 = true;
} else if (rect2.contains(e.getPoint())) {
mouseInRect2 = true;
}
} @Override
public void mouseReleased(MouseEvent e) {
mouseInRect1 = false;
mouseInRect2 = false;
}
}); this.addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
if (mouseInRect1) {
rect1.setFrame(e.getX(), e.getY(), rect1.getWidth(), rect1
.getHeight()); RectDragged.this.repaint();
} if (mouseInRect2) {
rect2.setFrame(e.getX(), e.getY(), rect2.getWidth(), rect2
.getHeight()); RectDragged.this.repaint();
}
}
});
} @Override
protected void paintComponent(Graphics g) {
super.paintComponent(g); Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.RED);
g2d.fill(rect1);
g2d.setColor(Color.GREEN);
g2d.fill(rect2);
} private static void createGUIAndShow() {
JFrame frame = new JFrame(); RectDragged rd = new RectDragged();
frame.getContentPane().add(rd); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 500);
frame.setVisible(true);
} public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
RectDragged.createGUIAndShow();
}
});
}}
this.addMouseMotionListener(new MouseAdapter() {
C:\RectDragged.java:35: 方法未覆盖其父类的方法
@Override
^
C:\RectDragged.java:34: 无法将 java.awt.Component 中的 addMouseMotionListener(java.awt.event.MouseMotionListener) 应用于 (<匿名 java.awt.event.MouseAdapter>)
this.addMouseMotionListener(new MouseAdapter() {
^
2 错误处理已完成。
this.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
if (mouseInRect1) {
rect1.setFrame(e.getX(), e.getY(), rect1.getWidth(), rect1
.getHeight()); RectDragged.this.repaint();
} if (mouseInRect2) {
rect2.setFrame(e.getX(), e.getY(), rect2.getWidth(), rect2
.getHeight()); RectDragged.this.repaint();
}
}
});