这样的一个界面应该怎么去实现 就是这个图片,不知道应该怎么做,里面的椭圆是可以拖拽的,还有每个椭圆之间可以连线他会自己找最近的距离进行连接。连接的线也有2个焦点,可以进行拖拽。拖拽成曲线不知道这个需要怎么做。用什么做 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 再用我的回答来占个坑:第一个问题, 对椭圆不熟, 不知道怎么做, 这个应该要看椭圆的相应特性了。另外一个就是这条曲线上,有2个点,就是平分这条曲线三段。这个点可以拖拽,曲线的形状就会变化。。1. 对用来画之个图形的组件, 如JPanel增加鼠标事件处理: addMouseListener和addMouseMotionListener2. 画两个小四边形(Rectangle)在这2个点处, 大小随意,宽跟高为2, 3, 4等都可试试, 找出最太平间的来, 用来处理拖拽。3. 当鼠标按下后, 检查鼠标的坐标是否在这2个小四边形中的某一个内。4. 如果在, 那么当鼠标被拖动时, 修改被拖动的小四边形的坐标, 也同时去计算修改那条曲线的数据, 重绘。 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() {我使用的是JDK6.10所以这个没有任何问题, 如果在你的机器上不行, 改为this.addMouseMotionListener(new MouseMotionAdapter() {即可。至于youjianbo_han_87, 我只想说,就是一丫的无事找抽型, 已经够给它面子了, 没说是人渣。 用ext,dojo,mootools等js库几句话就能实现拖拽功能 list转换成byte数组 求一些java的快捷键 去jtable中从数据库获取数据后在界面显示出的省略号??????? java程序中配置文件的加载 重现:classNotFoundException 数据库连接问题 为什么我的JSP文件不能被解释? 初学java的一个问题 为实现公文审批,需要数字签名,各位帮我提个方案吧?如何实现? 基础问题 [编程]应用缓冲区的思想,实现BufferedReader中的public int read()方法 比较如下两答案,哪一个正确?请说明原因.
1. 对用来画之个图形的组件, 如JPanel增加鼠标事件处理: addMouseListener和addMouseMotionListener
2. 画两个小四边形(Rectangle)在这2个点处, 大小随意,宽跟高为2, 3, 4等都可试试, 找出最太平间的来, 用来处理拖拽。
3. 当鼠标按下后, 检查鼠标的坐标是否在这2个小四边形中的某一个内。
4. 如果在, 那么当鼠标被拖动时, 修改被拖动的小四边形的坐标, 也同时去计算修改那条曲线的数据, 重绘。 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();
}
});
}}
我使用的是JDK6.10所以这个没有任何问题,
如果在你的机器上不行, 改为
this.addMouseMotionListener(new MouseMotionAdapter() {
即可。至于youjianbo_han_87, 我只想说,就是一丫的无事找抽型, 已经够给它面子了, 没说是人渣。