Announcement

Collapse
No announcement yet.

Grafik (Linie) in Panel zeichnen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Grafik (Linie) in Panel zeichnen

    Hallo!

    Ich habe ein JApplet, das aus 2 JPanel besteht bzw. bestehen SOLL. In das eine JPanel sollen Buttons rein (zur Steuerung), in das andere JPanel möchte ich eine Grafik ( zb. Linie ) zeichnen.

    Eine Grafik alleine zu zeichnen ist kein Probelm ...

    public void paint( Graphics g )
    {
    g.drawLine(0, 0, 10, 10);
    }

    Aber diese in das JPanel zu bekommen...

    Vielen Dank für die Hilfe!

    Thomas

  • #2
    Hallo!
    Erstmal Grundlagen:
    zum "adden" von panels muß dem dialog (bzw. seiner content pane) ein zweckmaessiges layout verpasst werden (im default sollte das FlowLayout sein).

    dann ueberschreibt man die paintComponent(Graphics) im JPanel auf dem man zeichnen moechte.

    bei Zeichnen sollte man auch darauf achten, dass die Werte in pixeln sind, und ob man die Linie nicht aus dem sichtbaren Bereich hinaus plottet.

    HTH Rocc

    Comment


    • #3
      Danke für die Info, aber das hilft mir auch nicht weiter...

      Wie überschreibe ich die paintComponent im JPanel ?

      JPanel panel = new JPanel();

      und dann vielleicht ?

      panel.paintComponent(Graphics)
      {
      }

      Ein bisserl code wäre sehr nützlich :

      Comment


      • #4
        Und da isser... <BR>

        <PRE>
        class MyPanel extends JPanel {
        public MyPanel() { ... }
        public void paintComponent(Graphics g) {
        // linie zeichnen
        }
        }
        </PRE>

        HTH Rocc

        Comment


        • #5
          wahrscheinlich bin ich für Java nicht geeignet, aber ich poste jetzt einfach mal mein Beispielcode...<br>Vielleicht wird es dann klar, wie ich das einbauen möchte...
          <br><br>
          import java.awt.*;<br>
          import java.awt.Graphics;<br>
          import javax.swing.*;<br>
          <br>
          public class ShowResults extends JApplet<br>
          {<br>
          JPanel pCenter = new JPanel();<br>
          JPanel pSouth = new JPanel();<br>
          <br>
          public void init()<br>
          {<br>
          JButton b1 = new JButton("Button");<br>
          <br>
          pSouth.add(b1);<br>
          getContentPane().add(pSouth, BorderLayout.SOUTH);<br>
          getContentPane().add(pCenter, BorderLayout.cENTER);<br>
          <br>
          }<br>
          <br>
          public void paint( Graphics g )<br>
          {<br>
          g.drawLine(0, 0, 10, 10);<br>
          }<br>
          }<br>

          In 'pCenter' soll die Zeichnung rein, die ich hier noch mit der Methode paint(Graphics g) zeichne. Allerdings überschreibt mir diese Grahpik bei der Anzeige auch den Button.

          Danke nochmal für die Hilfe!

          Thoma

          Comment


          • #6
            Du zeichnest auf dem Applet, nicht auf dem Panel, wie gewollt!
            <BR>
            1. Setze in die klasse ShowResults als innere Klasse meinen Beispielcode und zeichne darin die Linie
            <BR>
            2. JPanel pCenter = new MyPanel();
            <BR>
            3. die paint() Methode von JApplet kann somit entfernt werden!
            <BR>
            HTH Rocc

            Comment


            • #7
              Die init() geht auch anders:

              <BR>
              <PRE>
              private void init() {
              pSouth.add(new JButton("Button"));
              getContentPane().setLayout(new BorderLayout());
              getContentPane().add(pSouth, "South");
              getContentPane().add(pCenter, "Center");
              }

              </PRE>

              HTH Rocc

              Comment


              • #8
                SUUUUPER! Du hast es echt drauf!

                Vielen Dank!

                Das hilft mir jetzt schon mal sehr weiter...<br><br>
                Jetzt hab ich nur noch ein Problem.<br>
                Die Werte, die ich zeichnen will, stehen in ShowResults und müssten an MyPanel übergeben werden...

                Wie stell ich das an

                Comment


                • #9
                  einfachste Lösung:
                  <PRE>
                  class MyPanel extends JPanel {
                  private Line2D line;
                  MyPanel(Line2D line_) {
                  this.line = line_;
                  }

                  public void paintComponent(Graphics g) {
                  g.drawLine(this.line);
                  }
                  }
                  </PRE>

                  bessere Lösung ist eine setLine(Line2D) Methode in MyPanel oder ListenerInterface in ShowResults, oder ...

                  HTH Rocc

                  Comment


                  • #10
                    sorry g.drawLine(Line2D) muss natürlich ersetzt werden durch

                    g.drawLine(line.getX1(), line.getY1(), line.getX2(), line.getY2());

                    oder noch schöner:
                    Graphics2D g2 = (Graphics2D) g;
                    g2.draw(line)

                    Comment


                    • #11
                      Meine Frage bezog sich eigentlich auf die Klasse ShowResults...<br>
                      <br>
                      Was muss ich in ShowResults aufrufen bzw. mit welchen Parametern, damit der Wert (zb. int start=15) in MyPanel zur Verfügung steht ?

                      vielleicht so?<br>
                      int start = 15;<br>
                      JPanel pCenter = new MyPanel(start);<br>
                      <br>
                      Und wo fange ich den Wert in MyPanel wieder auf ?<br>
                      <br>
                      In ... public MyPanel(int startvalue) vielleicht ? geht das?<br>
                      <br>
                      Danke

                      Comment


                      • #12
                        wenn du start nicht mehr benötigst, dann <BR>
                        <PRE>
                        JPanel pCenter = new MyPanel(15);

                        class MyPanel extends JPanel {
                        int startValue;
                        public MyPanel(int startValue_) {
                        startValue = startValue_;
                        }

                        ...
                        }
                        </PRE>
                        oder
                        <PRE>
                        JPanel pCenter = new MyPanel();

                        class MyPanel extends JPanel {
                        int startValue = 15;
                        public MyPanel() { .. }
                        ...
                        }
                        </PRE&gt

                        Comment


                        • #13
                          Vielen Vielen Dank nochmal!<br>
                          Jetzt funktioniert es genau so, wie es soll.<br>
                          <br>
                          Schön, dass es so nette Menschen gibt, die einem bei Problemen weiter helfen!<br>
                          <br>
                          Danke!<br>
                          <br>
                          Thoma

                          Comment

                          Working...
                          X