Zeichnungs-Programm

Status
Nicht offen für weitere Antworten.

kasumix

Neues Mitglied
Hallo Leute

Ich bin zur Zeit an der Konzeption von einem neuen Java Programm, mit welchem man WebBasedTrainings erstellen kann. Bisher hat das meiste gut geklappt, doch jetzt stelle ich mir die Frage wie ich die verschiedenen gezeichneten Objekte anordnen und darstellen soll.
Ich habe mir etwas in der Art wie ein dragable JPanel dass man resizen kann vorgestellt. ist soetwas möglich? Habe bisher nichts darüber finden können.

Danke für eure Hilfe

Gruss Kasumix
 

Marco13

Top Contributor
Java ist ein Objektorientierte Programmiersprache, d.h. alles was man überhaupt zeichnen kann, ist ein Objekt (oder zumindest ein Teil davon). Die Frage ist in diesem Sinne etwas zu ungenau. Um was für Objekte handelt es sich? Wenn es Objekte eine Klasse sind, die von JPanel erbt, dann könnte man sie vermutlich auch von einer Art "DraggableJPanel" erben lassen. Wenn die Komponente, in der diese DraggableJPanels liegen, dann ein null-Layout hat, könnte man die JPanels mit der Maus verschieben und ihre Größe ändern. Evtl. sollte aber auch die übergeordnete Komponente diese Möglichkeiten anbieten. Was genau du meintest, ist aber noch nicht ganz klar.
 

André Uhres

Top Contributor
kasumix hat gesagt.:
..Ich habe mir etwas in der Art wie ein dragable JPanel dass man resizen kann vorgestellt. ist soetwas möglich?..
Hab vor langer Zeit mal sowas inder Richtung gebastelt. In diesem Beispiel hängen die Mouselistener am MainPanel:
Code:
package paintdemo;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class DND_Demo {
    public static void main(final String[] args) {
        final ButtonGroup grp = new ButtonGroup();
        final JPanel palette = new JPanel(new FlowLayout(FlowLayout.LEFT));
        palette.setBorder(BorderFactory.createTitledBorder("Palette"));
        final MainPanel mainPanel = new MainPanel();
        mainPanel.setBorder(BorderFactory.createTitledBorder("Main-Panel"));
        mainPanel.setPalette(palette);
        for(int j=0; j<3; j++){
            final JToggleButton btn = new JToggleButton("Panel "+(j+1));
            palette.add(btn);
            grp.add(btn);
            btn.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    mainPanel.setAdding(btn.getText());
                }
            });
        }
        palette.add(new JLabel("<html><font color=blue>Select a panel and click into Main-Panel 
" +
                "to place a new subpanel (resizable,moveable)"));
        final JFrame f = new JFrame("Drag and drop panels");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(palette, BorderLayout.NORTH);
        f.getContentPane().add(mainPanel, BorderLayout.CENTER);
        f.setSize(800, 600);
        f.setVisible(true);
    }
}
class MainPanel extends JPanel implements MouseListener, MouseMotionListener {
    private JPanel palette;
    private String adding="";
    private SubPanel hitPanel;
    private int deltaX, deltaY, oldX, oldY;
    private final int TOL = 3;  //tolerance
    public MainPanel() {
        setLayout(null);
        addMouseListener(this);
        addMouseMotionListener(this);
    }
    public void mousePressed(final MouseEvent e) {
        if( adding != "" ){
            setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
            SubPanel sub = new SubPanel(adding);
            add(sub);
            sub.setSize(sub.getPreferredSize());
            sub.setLocation((int)e.getX(),(int)e.getY());
            revalidate();
            adding = "";
            return;
        }
        Component c = getComponentAt(e.getPoint());
        if (c instanceof SubPanel) {
            hitPanel = (SubPanel) c;
            oldX = hitPanel.getX();
            oldY = hitPanel.getY();
            deltaX = e.getX() - oldX;
            deltaY = e.getY() - oldY;
            if( oldX < e.getX()-TOL ) oldX += hitPanel.getWidth();
            if( oldY < e.getY()-TOL ) oldY += hitPanel.getHeight();
        }
    }
    public void mouseDragged(final MouseEvent e) {
        if (hitPanel != null) {
            int x = e.getX();
            int y = e.getY();
            int xDiff = x-oldX;
            int yDiff = y-oldY;
            int xH = hitPanel.getX();
            int yH = hitPanel.getY();
            int w = hitPanel.getWidth();
            int h = hitPanel.getHeight();
            Dimension min = hitPanel.getMinimumSize();
            Dimension max = hitPanel.getMaximumSize();
            int wMin = (int)min.getWidth();
            int wMax = (int)max.getWidth();
            int hMin = (int)min.getHeight();
            int hMax = (int)max.getHeight();
            int cursorType = hitPanel.getCursor().getType();
            if( cursorType == Cursor.W_RESIZE_CURSOR){           //West resizing
                if( (w <= wMin && xDiff > 0) || (w >= wMax && xDiff < 0) ) return;
                hitPanel.setBounds( x, yH, w - xDiff, h );
            }else if( cursorType == Cursor.N_RESIZE_CURSOR){     //North resizing
                if( (h <= hMin && yDiff > 0) || (h >= hMax && yDiff < 0) ) return;
                hitPanel.setBounds( xH, y, w, h - yDiff );
            }else if( cursorType == Cursor.S_RESIZE_CURSOR){     //South resizing
                if( (h <= hMin && yDiff < 0) || (h >= hMax && yDiff > 0) ) return;
                hitPanel.setSize( w, h + yDiff );
            }else if( cursorType == Cursor.E_RESIZE_CURSOR){     //East resizing
                if( (w <= wMin && xDiff < 0) || (w >= wMax && xDiff > 0) ) return;
                hitPanel.setSize( w + xDiff, h );
            }else if( cursorType == Cursor.NW_RESIZE_CURSOR){     //NorthWest resizing
                if( (h <= hMin && yDiff > 0) || (h >= hMax && yDiff < 0) ) return;
                if( (w <= wMin && xDiff > 0) || (w >= wMax && xDiff < 0) ) return;
                hitPanel.setBounds( x, y, w - xDiff, h - yDiff );
            }else if( cursorType == Cursor.NE_RESIZE_CURSOR){     //NorthEast resizing
                if( (h <= hMin && yDiff > 0) || (h >= hMax && yDiff < 0) ) return;
                if( (w <= wMin && xDiff < 0) || (w >= wMax && xDiff > 0) ) return;
                hitPanel.setBounds( xH, y, w + xDiff, h - yDiff );
            }else if( cursorType == Cursor.SW_RESIZE_CURSOR){     //SouthWest resizing
                if( (h <= hMin && yDiff < 0) || (h >= hMax && yDiff > 0) ) return;
                if( (w <= wMin && xDiff > 0) || (w >= wMax && xDiff < 0) ) return;
                hitPanel.setBounds( x, yH, w - xDiff, h + yDiff );
            }else if( cursorType == Cursor.SE_RESIZE_CURSOR){     //SouthEast resizing
                if( (h <= hMin && yDiff < 0) || (h >= hMax && yDiff > 0) ) return;
                if( (w <= wMin && xDiff < 0) || (w >= wMax && xDiff > 0) ) return;
                hitPanel.setSize( w + xDiff, h + yDiff );
            }else{          //moving subpanel
                hitPanel.setLocation( x-deltaX, y-deltaY );
            }
            oldX = e.getX();
            oldY = e.getY();
        }
    }
    public void mouseMoved(final MouseEvent e) {
        Component c = getComponentAt(e.getPoint());
        if (c instanceof SubPanel) {
            int x  = e.getX();
            int y  = e.getY();
            int xC = c.getX();
            int yC = c.getY();
            int w  = c.getWidth();
            int h  = c.getHeight();
            if(       y >= yC-TOL   && y <= yC+TOL && x >= xC-TOL   && x <= xC+TOL  ){
                c.setCursor(new Cursor(Cursor.NW_RESIZE_CURSOR));
            }else if( y >= yC-TOL   && y <= yC+TOL && x >= xC-TOL+w && x <= xC+TOL+w ){
                c.setCursor(new Cursor(Cursor.NE_RESIZE_CURSOR));
            }else if( y >= yC-TOL+h && y <= yC+TOL+h && x >= xC-TOL   && x <= xC+TOL ){
                c.setCursor(new Cursor(Cursor.SW_RESIZE_CURSOR));
            }else if( y >= yC-TOL+h && y <= yC+TOL+h && x >= xC-TOL+w && x <= xC+TOL+w ){
                c.setCursor(new Cursor(Cursor.SE_RESIZE_CURSOR));
            }else if( x >= xC-TOL   && x <= xC+TOL ){
                c.setCursor(new Cursor(Cursor.W_RESIZE_CURSOR));
            }else if( y >= yC-TOL   && y <= yC+TOL ){
                c.setCursor(new Cursor(Cursor.N_RESIZE_CURSOR));
            }else if( x >= xC-TOL+w && x <= xC+TOL+w ){
                c.setCursor(new Cursor(Cursor.E_RESIZE_CURSOR));
            }else if( y >= yC-TOL+h && y <= yC+TOL+h ){
                c.setCursor(new Cursor(Cursor.S_RESIZE_CURSOR));
            }else{
                c.setCursor(new Cursor(Cursor.MOVE_CURSOR));
            }
        }
    }
    public void mouseReleased(final MouseEvent e) { hitPanel = null; }
    public void mouseClicked(final MouseEvent e) {}
    public void mouseEntered(final MouseEvent e) {}
    public void mouseExited(final MouseEvent e) {}
    public void setAdding(final String string) {
        adding = string;
        setCursor(new Cursor(Cursor.HAND_CURSOR));
    }
    public void setPalette(final JPanel panel) { palette = panel; }
}
class SubPanel extends JPanel {
    public SubPanel(final String name) {
        setPreferredSize(new Dimension(100, 100));
        setMinimumSize(new Dimension(70, 50));
        setMaximumSize(new Dimension(400, 300));
        setBorder(new TitledBorder(new LineBorder(Color.BLACK), name));
    }
}
 

kasumix

Neues Mitglied
Danke für die schnellen Antworten. Das Beispiel von André Uhres hat den Nagel ziemlich auf den Kopf getroffen. genau sowas in der Art habe ich mir vorgestellt. Nun habe ich noch eine kleinere Frage. wie sieht es mit dem Border aus. Wenn man Shapes in einem Zeichenprogramm erstellt und diese anwählt, bekommen Sie meistens solche kleine Viereiche damit man sie resizen kann.
Ich weiss nicht genau wie ich das am sinnvollsten löse. Ich überlege mir eine Borderklasse zu erstellen die diese Vierecke um die Komponente Zeichnet. Gibt es da einen einfacheren bzw schnelleren Weg?

Gruss Kasumix
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin Zugriff auf Bildschirmobjekte aus einem anderen Programm AWT, Swing, JavaFX & SWT 6
Juelin starten maven javafx programm ohne netbeans AWT, Swing, JavaFX & SWT 38
P AWT Programm funktioniert nicht richtig AWT, Swing, JavaFX & SWT 35
G CAD Programm AWT, Swing, JavaFX & SWT 4
thor_norsk E - Mail Programm AWT, Swing, JavaFX & SWT 2
G Über installDist exportiertes Programm wirft "Unsupported JavaFX configuration" AWT, Swing, JavaFX & SWT 0
CodingBerlin JavaFX Programm läuft nur unter Eclipse AWT, Swing, JavaFX & SWT 1
J Programm findet Resource nicht. AWT, Swing, JavaFX & SWT 6
N Programm Läuft nicht auf anderen Pcs AWT, Swing, JavaFX & SWT 9
imawake Java Paket-Tracking Programm 📦 AWT, Swing, JavaFX & SWT 7
S Lustiges programm schnell coden? AWT, Swing, JavaFX & SWT 2
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
P Swing Programm hängt sich bei Buttondruck auf? (GUI für "Chatbot" erstellen) AWT, Swing, JavaFX & SWT 15
M DragAndDrop - aus Browser ins Programm AWT, Swing, JavaFX & SWT 6
T Java GUI - Würfel Programm AWT, Swing, JavaFX & SWT 6
JojoSand Java Programm wird nicht gestartet - keinen Fehlerhinweis AWT, Swing, JavaFX & SWT 9
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
I Gui in bestehendes Java-Programm AWT, Swing, JavaFX & SWT 11
L JavaFX IntelliJ Standalone Programm exportieren AWT, Swing, JavaFX & SWT 9
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
M AWT Programm in den Tray minimieren AWT, Swing, JavaFX & SWT 2
steven789hjk543 Swing Weiß jemand, warum dieses Programm nicht funktioniert? AWT, Swing, JavaFX & SWT 7
A Java Programm gestalten AWT, Swing, JavaFX & SWT 4
P Swing Warum startet das Programm nicht? AWT, Swing, JavaFX & SWT 3
J JavaFX Kamera im Programm öffnen AWT, Swing, JavaFX & SWT 6
H Hintergrundbild in einem Programm AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower progressBar in ein bestehendes Programm einbauen AWT, Swing, JavaFX & SWT 3
J Verbesserungsvorschläge?! Kleines AWT Programm AWT, Swing, JavaFX & SWT 4
A Programm nun in ein Frame basteln AWT, Swing, JavaFX & SWT 1
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
R Swing Programm läuft nur beim Debuggen korrekt ab AWT, Swing, JavaFX & SWT 4
Arif Swing Programm friert ein... AWT, Swing, JavaFX & SWT 2
apple_pie1998 Programm gibt plötzlich exceptions aus. AWT, Swing, JavaFX & SWT 4
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
X JMenu Menu-Bar ausrichtung ändern im Programm AWT, Swing, JavaFX & SWT 0
T Swing Programm hängt sich auf! AWT, Swing, JavaFX & SWT 23
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
P Programm durch Dateiaufruf starten und Datei öffnen AWT, Swing, JavaFX & SWT 2
S Action durchführen beim Programm beenden AWT, Swing, JavaFX & SWT 3
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
G Programm GUI erstellen AWT, Swing, JavaFX & SWT 5
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
T Programm im METRO Design? AWT, Swing, JavaFX & SWT 1
J Programm hängt sich bei Log In auf AWT, Swing, JavaFX & SWT 1
C Programm mit Passwort schließen AWT, Swing, JavaFX & SWT 5
D Robot Programm mit Escape abbrechen (aus Eclipse heraus) AWT, Swing, JavaFX & SWT 2
N Programm läuft perfekt in Eclipse aber nicht in .JAR AWT, Swing, JavaFX & SWT 3
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
J Programm im GUI ausführen AWT, Swing, JavaFX & SWT 4
A Probleme mit 2 JFrames in einem Programm AWT, Swing, JavaFX & SWT 7
S Event Handling konsole Programm mit Tastendruck beenden AWT, Swing, JavaFX & SWT 5
G JTextArea on the fly aus anderem Programm befüllen AWT, Swing, JavaFX & SWT 4
K Swing Konsolen Programm in GUI - Suche Hilfe bei Konsolenausgabe AWT, Swing, JavaFX & SWT 2
W Windows Fenster in einem Programm AWT, Swing, JavaFX & SWT 2
F Mal Programm AWT, Swing, JavaFX & SWT 13
C In Hauptfenster Programm-Klassen implementieren AWT, Swing, JavaFX & SWT 9
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
C Swing Wie kann ich im Programm das Menü schließen AWT, Swing, JavaFX & SWT 2
J SWING - Programm ohne Eclipse etc. starten AWT, Swing, JavaFX & SWT 7
J Button soll nach Klick Text ändern und Programm in 3 Sekunden beenden AWT, Swing, JavaFX & SWT 6
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
M Programm in Jframe "einbinden" AWT, Swing, JavaFX & SWT 7
S Programm auf aktuellen Stand bringen AWT, Swing, JavaFX & SWT 2
Spin Tool: Popup -Programm AWT, Swing, JavaFX & SWT 3
GUI-Programmer Swing JWindow - Programm wird ohne Grund beendet AWT, Swing, JavaFX & SWT 3
E Kreis-Mal-Programm AWT, Swing, JavaFX & SWT 7
P Programm aktuallisiert sich nur beim Rüberzeigen AWT, Swing, JavaFX & SWT 6
T Java-Anwendung arbeitet Programm in seltsamer Reihenfolge ab AWT, Swing, JavaFX & SWT 3
C Programm für 5 sekunden anhalten und actionevent abfangen AWT, Swing, JavaFX & SWT 18
J Programm schließen AWT, Swing, JavaFX & SWT 4
J Programm nur einmal öffnen AWT, Swing, JavaFX & SWT 3
E Windows Kontext Menü - Laufendes Programm AWT, Swing, JavaFX & SWT 3
T Programm vom Desktop starten! AWT, Swing, JavaFX & SWT 2
S Programm pausieren während JDialog offen ist AWT, Swing, JavaFX & SWT 2
M Browser in Programm einbinden AWT, Swing, JavaFX & SWT 4
R Durch Listener lässt sich Programm nicht mehr ausführen AWT, Swing, JavaFX & SWT 4
H Userinput in GUI an externes Programm AWT, Swing, JavaFX & SWT 8
D Firefox aus Programm starten AWT, Swing, JavaFX & SWT 4
S LayoutManager Einfaches Programm mit VE und Eclipse3.6 realisieren AWT, Swing, JavaFX & SWT 2
J SWT 32 bit Programm für 64 bit Jave AWT, Swing, JavaFX & SWT 10
R GUI hängt während Programm läuft AWT, Swing, JavaFX & SWT 7
S AWT Fenster schließen und Programm beenden AWT, Swing, JavaFX & SWT 10
H Infofenster vor dem eigentlichen Java Programm AWT, Swing, JavaFX & SWT 3
B Uberschrift in Swing-Programm zur Laufzeit aendern... AWT, Swing, JavaFX & SWT 4
C Swing Kleines Programm mit SWING unter Verwendung von MVC AWT, Swing, JavaFX & SWT 5
capgeti Wie Programm in JPanel (o.ä.) starten? AWT, Swing, JavaFX & SWT 3
B Externes Programm mit Robot Steuern AWT, Swing, JavaFX & SWT 3
G Programm läuft nur auf manchen Rechnern AWT, Swing, JavaFX & SWT 10
M SWT Programm pausiert ungewollt AWT, Swing, JavaFX & SWT 5
K Website in Java Programm einbinden AWT, Swing, JavaFX & SWT 3
B komplettes programm in einem fenster AWT, Swing, JavaFX & SWT 5
L Frage bei Programm mit Zufallskreisen AWT, Swing, JavaFX & SWT 9
L Programm terminated (zu frueh) AWT, Swing, JavaFX & SWT 3
T SplashScreen im laufenden Programm AWT, Swing, JavaFX & SWT 2
M Panelinhalt im Programm verändern AWT, Swing, JavaFX & SWT 12
R Programm nicht mehr in der Taskleiste AWT, Swing, JavaFX & SWT 2
3TageBart Ebenen in Zeichen-Programm implementieren AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben