当前位置:编程学习 > JAVA >>

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


1.有示例Demo给我发一份435718349@qq.com
2.有java布局思路也行
3.有环形布局如下图,图是由工具生成的。代码找了很久都没找到。
4.感激不尽,也可以qq联系我。
Java 算法 布局 --------------------编程问答-------------------- 自己来顶一个,求高手解答~ --------------------编程问答-------------------- 绝对坐标定位,不用什么布局。
两个矩形之间再加一个关系:A指向B,从A到B画一条带箭头的线。 --------------------编程问答-------------------- 1.可是数据不是固定的。我要先扫描有多少数据。然后就生成了连接关系,用绝对定位的话:我根本不知道有多少个模型。
2.还有模型的线最好不交叉,位置摆放正确美观(关键就是这个). --------------------编程问答--------------------
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();
        }
    }
}
--------------------编程问答-------------------- label可以拖动。 --------------------编程问答-------------------- 上面的程序已经做好了基础。
观察你的图形,发现有一个中心点,然后向四周扩展。
这就先建立连接,然后从中心点开始,它连接出去的点X放在它四周,可以按平均值来计算,或者用某种权值的方式来计算坐标。
然后再遍历X,X又作为新的中心点,直到所有的点都没有连接出去的点为止。
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,