tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
698
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Jul 2002
    Ort
    Frankfurt (Hessen)
    Beiträge
    2.135
    Als Quelle nutze ich Java ist eine Insel - aber das Buch hilft mir im Moment nicht weiter

    gibts noch ande Bücher online - am besten für swing allein

    Die Frage womit ich mich im Moment beschäftige sind:

    wenn ich Netbeans unterandrem ein ScrollPane anlege wie schreibe ich da mit meinen Grafikfunctionen (die gut gehen wenn man nur ein fenster hat) rein ?

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    class DrawPanel extends JPanel
    {
         
      @Override
      protected void paintComponent( Graphics g )
      {
        Graphics2D g2 = (Graphics2D) g;
     
        super.paintComponent( g );
     
        this.zeichneNotenzeile(g);
      }

    das ist was ich habe und was geht (gekürzt da es nur um den Aufruf geht)

    wenn ich eine ScrollPane anlege bekomme ich nur den Code von NetBeans erstellt:

    private javax.swing.JScrollPane jScrollPane2;

    da fehlt doch ne Function ... wie bei den Listenern z.B. die ich erweitern kann mit meinem Code zum Zeichnen.

    zusatzfrage: ich mach zwar eine Scroll Pane um mir nur ein ausschnitt anzeigen zulassen aber wie definiere ich die grösse vom fenster dahinter ?

    also scroll fenster ist 400 * 300 aber das fenster in dem ich zeichne soll dann 800 * 300 sein

    zusätzlich versuche ich im Moment zu verstehen wie man ein extra Fenster aufmacht - es gibt ein Demo mit AboutBox das über ein Jmenu eintrag geöffnet wird, Noch verstehe ich das nicht. vorallem weil den Code der NetBeans mir anlegt wenn ich ein zusätzliches Item anlege und dazu ein set Acton erstelle, der erzeugte Code anders aus sieht wie der vorgegebene Demo Code
    Geändert von melmager (02.11.11 um 18:42 Uhr)
     

  2. #2
    Avatar von javaDeveloper2011
    javaDeveloper2011 javaDeveloper2011 ist offline Mitglied Brokat
    Registriert seit
    Feb 2011
    Beiträge
    445
    Blog-Einträge
    5
    Hallo melmager,

    auf nen JPanel kann man auf jeden Fall zeichnen, wenn das der Inhalt deines JScrollPanes werden sonn, übergiebst du das JPanel-Objekt an Kobnstuktor deines JScrollPanes.
    Am besten setzt man größen mit setPrefferedSize(x, y).

    www.javabuch.de dreht sich zwar nicht nur um Swing, ist aber das zweite bekannte Online-Book.
    Mit der gebundenen Version habe ich - abgesehen von Onlne-Tutorials und learning by doing - Java gelernt.

    Wenn das zweite Fenster ne art dialo sein soll währe der Code z.B. folgender:
    Code java:
    1
    2
    3
    4
    5
    6
    
    Object[] nachricht = {"Ein Fehler ist aufgetreten!"};
    Object[] optionen = {"OK"};
    final JOptionPane optionPane = new JOptionPane(nachricht, JOptionPane.ERROR_MESSAGE, JOptionPane.OK_OPTION, null, optionen, optionen[0]);
    JDialog dialog = optionPane.createDialog(deinJFrameObjekt, "Fehler");
    dialog.pack();
    dialog.show();

    Für ein gleichberechtigtes Fenster:
    Code java:
    1
    2
    3
    
    JFrame win = new JFrame("Der Titel");
    win.setSize(200, 100);
    win.setVisible(true);

    Vielleicht intessiert dich ja auch meine Swing-FAQ (Link in der Signatur)...

    Gruß
    Geändert von javaDeveloper2011 (02.11.11 um 19:18 Uhr) Grund: Code war zuvor falsch angepasst
     

  3. #3
    Registriert seit
    Jul 2002
    Ort
    Frankfurt (Hessen)
    Beiträge
    2.135
    Zitat Zitat von javaDeveloper2011 Beitrag anzeigen
    Hallo melmager,

    auf nen JPanel kann man auf jeden Fall zeichnen, wenn das der Inhalt deines JScrollPanes werden sonn, übergiebst du das JPanel-Objekt an Kobnstuktor deines JScrollPanes.
    Am besten setzt man größen mit setPrefferedSize(x, y).
    Ich bekomms nicht gebacken

    Code java:
    1
    2
    3
    4
    5
    
    jScrollPane2 = new javax.swing.JScrollPane();
     
    jScrollPane2.setBackground(resourceMap.getColor("jScrollPane2.background")); // NOI18N
     
    jScrollPane2.setName("jScrollPane2"); // NOI18N

    da wird der scrollPane erzeugt

    und danach der Jpanel

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    jPanelgfx = new javax.swing.JPanel();
     
    jPanelgfx.setBackground(resourceMap.getColor("jPanelgfx.background")); // NOI18N
     
    jPanelgfx.setName("jPanelgfx"); // NOI18N
     
    // Code of sub-components - not shown here
     
    // Layout setup code - not shown here
     
    jScrollPane2.setViewportView(jPanelgfx);
    // folgende Zeilen habe ich eingebaut 
    jPanelgfx.add(new jcPanelgfx());
    jPanelgfx.setVisible( true );

    und dat ist die classe

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    
    class jcPanelgfx extends javax.swing.JPanel {
            @Override
            protected void paintComponent( java.awt.Graphics g ) {
               java.awt.Graphics2D g2 = (java.awt.Graphics2D) g;
               super.paintComponent( g );
               g.drawLine(30, 30, 100, 100);
            }
        }

    nur zeichen tut er nix
    Geändert von melmager (04.11.11 um 21:21 Uhr)
     

  4. #4
    Avatar von javaDeveloper2011
    javaDeveloper2011 javaDeveloper2011 ist offline Mitglied Brokat
    Registriert seit
    Feb 2011
    Beiträge
    445
    Blog-Einträge
    5
    Hallo,

    scroll fenster ist 400 * 300
    = JScrollPane?
    (oder doch JFrame?)
    fenster in dem ich zeichne soll dann 800 * 300
    = JPanel?

    Der NetBeans-GUI-Designer produziet leider teilweise unleserlichen und zeigt unvollständigen Code, deshalb hier einfach mal ein funktionierender Code der denke ich das tut was du willst:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    
    import javax.swing.*;
    import java.awt.*;
     
    public class Demo {
     
        public static void main(String[] args){
            try{
               UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            }
            catch(Exception ex){
            }           
            JFrame win = new JFrame("Demo");
            win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            // Neuer Code
            YourPanel panel = new YourPanel();
            panel.setPreferredSize(new Dimension(800, 300));
            JScrollPane sp = new JScrollPane(panel);
            sp.setPreferredSize(new Dimension(400, 300));
            win.add(sp);
            //
     
            win.pack();
            win.setVisible(true);
        }
     
    }
     
    // Dein Code
    class YourPanel extends JPanel {
        @Override
        protected void paintComponent(Graphics g) {
            Graphics2D g2 = (Graphics2D) g;
            super.paintComponent(g);
            g.drawLine(30, 30, 100, 100);
        }
    }
    //
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Grafiken zeichen im ScrollPane-demo.png  
     

  5. #5
    Registriert seit
    Jul 2002
    Ort
    Frankfurt (Hessen)
    Beiträge
    2.135
    Danke für den Code aber ich habe was functoniernes gehabt was auf ein normalen JFrame läuft - es ging tatsächlich drum das in ein bestehendes Projekt, das mit NetBeans erstellt wurde, einzubauen.

    ich bin schon mal ein schritt weiter

    wenn ich in einem listener der auf ein Button reagiert den Code einbaue habe ich meinen Strich auf dem Bildschirm.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
     private void jButtonMidiPortActionPerformed(java.awt.event.ActionEvent evt) {                                                
            // TODO add your handling code here: update Midi Devicelist in jComboMidi
            java.awt.Graphics g = jScrollPane2.getGraphics();
            java.awt.Graphics2D g2 = (java.awt.Graphics2D) g;
            g2.drawLine(20, 20, 100, 100);
            jPanelgfx.paintComponents(g2);
     
    // weiterer Code
    }
     

  6. #6
    Registriert seit
    Jul 2002
    Ort
    Frankfurt (Hessen)
    Beiträge
    2.135
    Also zeichen tut er aber es gibt 2 Probleme:

    A) der Scrollpane merkt nicht das das Gezeichnete grösser ist wie dat Fenster und blendet daher nicht die Balken ein zum verschieben des Ausschnitts

    B) wenn ich das gesamte Fenster der Anwendung die Grösse verändere verschwindet dat gezeichnete - müsste daran liege das PaintCompenents nicht überlagert ist - behaupte ich mal

    Ideen ?
    Geändert von melmager (05.11.11 um 16:47 Uhr)
     

  7. #7
    Avatar von javaDeveloper2011
    javaDeveloper2011 javaDeveloper2011 ist offline Mitglied Brokat
    Registriert seit
    Feb 2011
    Beiträge
    445
    Blog-Einträge
    5
    Wenn du dem JPanel gleich am Anfang ne prefferedSize giebst, müsste der JScrollPane das merken.
    Ohne sich anfangs auf eine Größe festzulegen, gehts denke ich nicht.
    Ist es besonders wichtig, dass der JFrame skalierbar ist, ansonsten einfach:
    Code java:
    1
    
    jFrame.setResizable(false);
     

  8. #8
    Registriert seit
    Jul 2002
    Ort
    Frankfurt (Hessen)
    Beiträge
    2.135
    Ich habe da ne Kurzanleitung im Netz gefunden -

    jetz mal eine generelle Frage ist die JscrollPane das übergeordnete Fensten und darunter ist dann das JPanel
    so habe ich es gemacht oder ist das umgekehrt wie in dem Beispiel das ich gefunden haben ?

    und ich denke ich muss mit setsize arbeiten um die grösse anzupassen - fragt sich nur wie

    Nachtrag:
    ich probiere im moment mehrer Varianten durch
    kann es sein das ich die grösse eines Jpanels nicht nachträglich ändern kann ?
    aber wozu habe ich dann setsize ?
    Geändert von melmager (06.11.11 um 21:22 Uhr)
     

  9. #9
    Avatar von javaDeveloper2011
    javaDeveloper2011 javaDeveloper2011 ist offline Mitglied Brokat
    Registriert seit
    Feb 2011
    Beiträge
    445
    Blog-Einträge
    5
    Hi,

    Meine Erfahrung: IMMER setPreferredSize()

    jetz mal eine generelle Frage ist die JscrollPane das übergeordnete Fensten und darunter ist dann das JPanel
    JPanel soll und ist IM JScrollPane.

    Gruß
     

  10. #10
    Registriert seit
    Jul 2002
    Ort
    Frankfurt (Hessen)
    Beiträge
    2.135
    Also jetzt habe ich was worauf ich aufbauen kann.

    jPanel1.setPreferredSize(blattgfx);

    geht

    Also nochmal die Kurzform wie es geht ein Fenster in Net Beans zu erstellen in das man zeichen kann:

    1)erstelle ein Jpanel
    2)dann in der design ansicht von NetBeans im Navigator Fenster sagen "enclosure in JScrollPane"
    3)erstelle eine classe
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    public class NotenBlatt extends JPanel {
     
      ZeichneNote blattgfx = new ZeichneNote();
     
        @Override
      protected void paintComponent( Graphics g )
      {
        Graphics2D g2 = (Graphics2D) g;
        super.paintComponent( g );
        
        // hier wird gezeichnet   
      }
    }

    4) im Jpanel "Cutomize Code" anwählen und dort -jPanel1 = new NotenBlatt();- eingeben - den default Code entsprechend abändern
    5) dann kann nach dem Zeichnen die Fenstergrösse mit -JPanel1.setPreferredSize- die grösse verändert werden die Scrollbalken werden entsprechend angepasst

    ergebniss siehe unten - das unterste fenster mit den Notenlinie
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Grafiken zeichen im ScrollPane-bildschirmfoto2.png  
    Geändert von melmager (12.11.11 um 14:32 Uhr)
     

  11. #11
    Registriert seit
    Jul 2002
    Ort
    Frankfurt (Hessen)
    Beiträge
    2.135
    Zitat Zitat von melmager Beitrag anzeigen
    Also jetzt habe ich was worauf ich aufbauen kann.

    jPanel1.setPreferredSize(blattgfx);

    geht
    naja fast - man kann zwar die grösse ändern aber leider wird der scrollbarebereich nur verändert wenn ich das gesamt fenster vergrössere ....
     

  12. #12
    Registriert seit
    Jul 2002
    Ort
    Frankfurt (Hessen)
    Beiträge
    2.135
    Also erst die neue Grösse setzen über ne Dimesion
    dann die neue Grösse an das JPanel übergeben und denn den ViewPort des ScrollPanels aufrufen
    dann für ein repaint sorgen und fertig ist die neue Ansicht

    Code java:
    1
    2
    3
    4
    
     blattdim.width = 17 * 4 * x + 50; // neue Breite
     jPanelBlatt.setPreferredSize(blattdim); // neu grösse setzen
     jScrollPaneBlatt.setViewportView(jPanelBlatt); 
    // aufruf um die Scrollbalken an die neue grösse vom JPanel anzupassen
     

Ähnliche Themen

  1. ScrollPane 2 lässt ScrollPane 1 verschwinden
    Von hinotenshi im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 31.01.10, 15:50
  2. Antworten: 7
    Letzter Beitrag: 23.01.09, 11:00
  3. 2d Grafiken auf dem Handy zeichen
    Von UmberHons im Forum Java
    Antworten: 2
    Letzter Beitrag: 01.04.08, 20:19
  4. Scrollpane
    Von mischdrx im Forum Flash Plattform
    Antworten: 0
    Letzter Beitrag: 30.11.06, 19:21
  5. Antworten: 20
    Letzter Beitrag: 09.03.04, 09:46