Berechnung der Position von Kinderelemente von einem Elternknoten

Diskutiere Berechnung der Position von Kinderelemente von einem Elternknoten im Java Basics - Anfänger-Themen Bereich.
mihe7

mihe7

Hab mal schnell was zusammengeschustert.
Java:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;

import javax.swing.*;

import java.util.*;
import java.util.function.Consumer;


public class Test {
    static class Node {
        private Rectangle bbox;
        private List<Node> children = new ArrayList<>();

        public Node(Rectangle bbox) { this.bbox = bbox; }
        public void add(Node child) { children.add(child); }
        public int getX() { return bbox.x; }
        public int getY() { return bbox.y; }
        public int getWidth() { return bbox.width; }
        public int getHeight() { return bbox.height; }

        public void draw(Graphics2D g) {
            g.draw(bbox);
        }

        public void forEachChild(Consumer<Node> c) {
            children.forEach(c);
        }
    }

    static class Canvas extends JComponent {
        Node root;

        public void setRoot(Node root) {
            this.root = root;
            repaint();
        }

        @Override
        protected void paintComponent(Graphics g) {
            Graphics2D g2 = (Graphics2D) g;
            paint(g2, root);
        }

        private void paint(Graphics2D g, Node node) {
            if (node != null) {
                node.draw(g);
                node.forEachChild(child -> paint(g, child));
            }
        }
    }

    private Canvas canvas;

    public Test() {
        Rectangle r = new Rectangle(300, 10, 600, 20);
        Node root = new Node(r);
        addChildren(root, 3, 150, 50, 10, 50);
        canvas = new Canvas();
        canvas.setRoot(root);
    }

    private void addChildren(Node node, int count, int width, int height, int hGap, int vGap) {
        int totalWidth = count*(width + hGap) - hGap;
        int centerX = node.getX() + node.getWidth() / 2;
        int cx = centerX - totalWidth / 2;
        int cy = node.getY() + node.getHeight() + vGap;        
        for (int i = 0; i < count; i++) {
            Rectangle rect = new Rectangle(cx, cy, width, height);
            node.add(new Node(rect));
            cx += width + hGap;
        }
    }


    public void run() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(canvas);
        frame.setSize(1000, 600);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().run());
    }
}
 
B

beta20

Also irgendwas passt einfach nicht...
Hier mal von meinem Debugger:

int numberOfBranch = 2
int widthBranchElement = 150; // in Pixel
int spaceBetweenElement = 20;

totalWidth = 2 * ( 150 + 20) - 20;
-> 320

centerX = 400 + 400 / 2;
-> 600

cx = 600 - 320/2;
-> 440

Heißt das erste Kindelement ist bei:
x = 440

Das zweite bei:
x = 610;
 
B

beta20

habe das Problem gefunden...
Es war nicht die Berechnung, es war in einer CSS Klasse!

Danke für die Hilfe!!!
 
Thema: 

Berechnung der Position von Kinderelemente von einem Elternknoten

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben