tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von genodeftest
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
514
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Jens B.
    Jens B. Jens B. ist offline Damn good coffee!
    tutorials.de Premium-User
    Registriert seit
    Nov 2001
    Beiträge
    2.477
    Hallo!
    Ich bin gerade dabei ein Schreibprogramm zu entwickeln. Schreiben nicht per Tastatur, sondern mit der Maus oder per Touchscreen / Tablet, also so etwas wie Xournal oder Jarnal. Da mir dort einige Funktionen fehlen mach ich es lieber selber

    Leider habe ich mit den Malfunktionen von Java null Erfahrungen. BIsher habe ich eine Klasse, die Canvas extendet, und male dort hinein. Das funktioniert auch ganz gut; beim vergrößern und verkleinern des Fensters wird aber komischerweise immer der Inhalt des Canvases gelöscht, woran könnte das liegen?

    Außerdem möchte ich nicht einfach einen Malbereich machen, sondern das Ganze auf Seiten aufteilen, wie es auch in Word o.Ä. ist. Ich dachte da an eine Liste von Canvases, jeder repäsentiert eine Seite, die irgendwie untereinander in einer JScrollPane angezeigt werden. Allerdings weiß ich nicht, wie ich die Canvases in der JScrollPane genau positionieren kann und ob das überhaupt eine gute Idee ist?

    Sollte ich vielleicht lieber irgendeine andere Klasse als Canvas benutzen? Ich finde sie ist sehr umständlich zu benutzen udn ich kenne bisher auch keinen Weg um an die Daten darin ranzukommen.

    Code ist recht lang, es geht hier ja auch eher ums Prinzip.

    Danke für eure Hilfe!
     

  2. #2
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    Statt Canvas würde ich JPanel nehmen und davon erben.

    beim vergrößern und verkleinern des Fensters wird aber komischerweise immer der Inhalt des Canvases gelöscht, woran könnte das liegen?
    scheint so, als würdest du nicht in der paint() / paintComponent() -Methode zeichnen, sondern irgendwo anders.

    Einführungen in das Zeichnen auf graphischen Komponenten gibts z.B. http://openbook.galileocomputing.de/...83a10ee741dbaa und http://download.oracle.com/javase/tu.../2d/index.html

    Zu der Liste an Canvas-Objekten:
    Um dein Schreibprogramm sinnvoll zu entwickeln, so dass du den Inhalt auch abspeichern kannst, würde ich eine andere Vorgehensweise wählen: Ein JPanel innerhalb eines anderen JPanels mit JScrollBars, also so:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
                                                      |J
                                                      |S
                                                      |c
                                                      |r
                                                      |o
                                                      |l
                                                      |l
                  JPanel                              |B
                                                      |a
                                                      |r
    _________________________
    JScrollBar
    Und nur die aktuelle Seite(n) darstellen. Wenn du für jede Seite ein eigenes Canvas oder JPanel erzeugst, ist das nicht ansatzweise skalierbar: Du wirst viel Speicher verbrauchen und bei jeder Änderung z.B. auf der 1. von 300 Seiten würde dazu führen, dass jede Seite neu berechnet werden muss.

    Tipp: schau dir den Quellcode von http://jedit.org/ und des Editors von Netbeans an. Vielleicht können die auch schon, was du willst.
    Jens B. bedankt sich. 
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  3. #3
    Avatar von Jens B.
    Jens B. Jens B. ist offline Damn good coffee!
    tutorials.de Premium-User
    Registriert seit
    Nov 2001
    Beiträge
    2.477
    Hallo nochmal,
    danke für deine Hilfe! Werde jetzt wohl die Ansicht auf 2 Seiten gleichzeitig beschränken, das macht denke ich Sinn. Habe jetzt über JPanels gezeichnet, allerdings wird immernoch der Inhalt beim vergrößern des Fensters gelöscht.

    Bin schon auf die Idee gekommen alle Zeichenschritte manuell zu speichern und diese dann bei jedem Fenstervergrößern komplett nachzuzeichnen, aber das ist ja Quatsch, was? Hier ein Teil meines bisherigen Codes:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
        class TestCanvas extends JPanel {       
            TestCanvas() {
            }
                    
            @Override 
            public void paintComponent(Graphics g) {
                Graphics2D g2 = (Graphics2D) g;
                g2.setStroke(new BasicStroke(thickness, CAP_ROUND, JOIN_BEVEL));
                g2.setColor(getCol(color));
                   
                g2.drawLine(last_x, last_y, xvalue, yvalue);
            }
        }
     
    ....
     
    // "master" ist eine Instanz obiger Klasse
                master.addMouseMotionListener(new MouseMotionAdapter() {
                    public void mouseDragged( MouseEvent event ) {
                        last_x = (last_x == -10 ? event.getX() : xvalue);
                        last_y = (last_y == -10 ? event.getY() : yvalue);
                        xvalue = event.getX();
                        yvalue = event.getY();
                        master.repaint();
                    }
    });

    Das ist natürlich nur ein Codeausschnitt, alle Variablen werden wo anders gültig eingeführt. Darum geht es ja auch nicht thickness und color werden über die Werkzeugwahl gesetzt.

    Danke.
     

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 02.06.10, 12:52
  2. ScrollPane 2 lässt ScrollPane 1 verschwinden
    Von hinotenshi im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 31.01.10, 15:50
  3. mehrere Tabellen in einem ScrollPane
    Von Biergamasda im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 4
    Letzter Beitrag: 19.07.07, 07:40
  4. Antworten: 6
    Letzter Beitrag: 10.12.04, 14:04
  5. mehrere Var. in einer?
    Von jan im Forum PHP
    Antworten: 3
    Letzter Beitrag: 20.02.02, 16:58