这样的一个界面应该怎么去实现

wqk2ls 2008-04-29 08:14:51


就是这个图片,不知道应该怎么做,里面的椭圆是可以拖拽的,还有每个椭圆之间可以连线。。。他会自己找最近的距离进行连接。连接的线也有2个焦点,可以进行拖拽。拖拽成曲线。。。不知道这个需要怎么做。用什么做。。。
...全文
170 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Inhibitory 2008-04-29
  • 打赏
  • 举报
回复
再用我的回答来占个坑:

第一个问题, 对椭圆不熟, 不知道怎么做, 这个应该要看椭圆的相应特性了。

另外一个就是这条曲线上,有2个点,就是平分这条曲线三段。这个点可以拖拽,曲线的形状就会变化。。
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();
}
});
}

}
wqk2ls 2008-04-29
  • 打赏
  • 举报
回复
看不见图片的,把图片地址,复制到ie中看看,试试行不行。。。
KKK2007 2008-04-29
  • 打赏
  • 举报
回复
用ext,dojo,mootools等js库几句话就能实现拖拽功能
Inhibitory 2008-04-29
  • 打赏
  • 举报
回复
this.addMouseMotionListener(new MouseAdapter() {
我使用的是JDK6.10所以这个没有任何问题,
如果在你的机器上不行, 改为
this.addMouseMotionListener(new MouseMotionAdapter() {
即可。

至于youjianbo_han_87, 我只想说,就是一丫的无事找抽型, 已经够给它面子了, 没说是人渣。
cmnong 2008-04-29
  • 打赏
  • 举报
回复
晕,你发帖,也不看看你的贴的效果,怎么回答你
qsrock 2008-04-29
  • 打赏
  • 举报
回复
图都看不到哦。
莫情莫钱 2008-04-29
  • 打赏
  • 举报
回复
看不到图
wangguilin 2008-04-29
  • 打赏
  • 举报
回复
那你帮个忙啊,别老说别人的不对啊!
chenhongxin 2008-04-29
  • 打赏
  • 举报
回复
看不到图呀,不过也帮顶一下,别沉下去...
chenhongxin 2008-04-29
  • 打赏
  • 举报
回复
帮顶....祝你早日解决..
youjianbo_han_87 2008-04-29
  • 打赏
  • 举报
回复
楼上是个屁 不对

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧