java 布局算法/环形布局 感谢~!

xinnan57 2013-06-20 10:27:43

1.有示例Demo给我发一份435718349@qq.com
2.有java布局思路也行
3.有环形布局如下图,图是由工具生成的。代码找了很久都没找到。
4.感激不尽,也可以qq联系我。
...全文
219 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Inhibitory 2013-06-20
  • 打赏
  • 举报
回复
上面的程序已经做好了基础。 观察你的图形,发现有一个中心点,然后向四周扩展。 这就先建立连接,然后从中心点开始,它连接出去的点X放在它四周,可以按平均值来计算,或者用某种权值的方式来计算坐标。 然后再遍历X,X又作为新的中心点,直到所有的点都没有连接出去的点为止。
Inhibitory 2013-06-20
  • 打赏
  • 举报
回复
label可以拖动。
Inhibitory 2013-06-20
  • 打赏
  • 举报
回复

package com.tur.demo;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;

public class Hello extends JPanel {
private java.util.List<MyLabel> labels = new java.util.ArrayList<MyLabel>();

public Hello() {
setLayout(null);

// 创建labels
addLabel(50, 50);
addLabel(250, 100);
addLabel(100, 200);
addLabel(250, 300);

// 建立label之间的连接.
labels.get(0).addConnectToLabel(labels.get(1));
labels.get(1).addConnectToLabel(labels.get(2));
labels.get(1).addConnectToLabel(labels.get(3));
}

private void addLabel(int x, int y) {
MyLabel label = new MyLabel();
label.setLocation(x, y);

this.add(label);
labels.add(label);
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);

Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

for (MyLabel label : labels) {
for (MyLabel toLabel : label.getConnectToLabels()) {
Line2D line = new Line2D.Float(label.getCentralPoint(), toLabel.getCentralPoint());
g2d.draw(line);

// 接下来计算line与label的交点,然后在交点处画三角形.
}
}
}

private static void createAndShowGui() {
JFrame frame = new JFrame("");

frame.getContentPane().add(new Hello());

// Set frame's close operation and location in the screen.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

public static void main(String[] args) throws Exception {
createAndShowGui();
}
}

class MyLabel extends JLabel {
private Point delta = new Point();
private java.util.List<MyLabel> connectToLabels = new java.util.LinkedList<MyLabel>();

public MyLabel() {
setSize(80, 30);
setOpaque(true);
setBackground(Color.YELLOW);

setHorizontalAlignment(CENTER);

handleEvents();
}

public Point2D getCentralPoint() {
Point pos = this.getLocation();
Point2D cp = new Point2D.Double();
cp.setLocation(pos.x + getWidth() / 2, pos.y + getHeight() / 2);

return cp;
}

public void addConnectToLabel(MyLabel label) {
connectToLabels.add(label);
}

public java.util.List<MyLabel> getConnectToLabels() {
return connectToLabels;
}

@Override
public void setLocation(Point pos) {
setLocation(pos.x, pos.y);
}

@Override
public void setLocation(int x, int y) {
super.setLocation(x, y);
setText("[" + x + ", " + y + "]");
}

private void handleEvents() {
MouseAdapter adapter = new MouseEventHandler();
addMouseListener(adapter);
addMouseMotionListener(adapter);
}

class MouseEventHandler extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
Point p = e.getPoint();
delta.setLocation(p.x, p.y);
}

@Override
public void mouseDragged(MouseEvent e) {
Point p = e.getPoint();
Point pos = new Point();
pos.setLocation(p.x - delta.x, p.y - delta.y);

SwingUtilities.convertPointToScreen(pos, MyLabel.this);
SwingUtilities.convertPointFromScreen(pos, getParent());

setLocation(pos);

getParent().repaint();
}
}
}
xinnan57 2013-06-20
  • 打赏
  • 举报
回复
1.可是数据不是固定的。我要先扫描有多少数据。然后就生成了连接关系,用绝对定位的话:我根本不知道有多少个模型。 2.还有模型的线最好不交叉,位置摆放正确美观(关键就是这个).
Inhibitory 2013-06-20
  • 打赏
  • 举报
回复
绝对坐标定位,不用什么布局。 两个矩形之间再加一个关系:A指向B,从A到B画一条带箭头的线。
xinnan57 2013-06-20
  • 打赏
  • 举报
回复
自己来顶一个,求高手解答~

51,397

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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