[Java] 2Fragen zu Swing

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Themonkey, 31. Mai 2010 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 31. Mai 2010
    2Fragen zu Swing

    hi Leute ich soll 2 Programme schreiben beides mit Swing habe zu jedem Programm eine frage

    Im ersten Programm geht es um :
    Das ich ein Quadrat in ein Fenster einbauen soll.Klickt der Benutzer auf das Quadrat, so soll dieses Quadrat auf eine zufällige Position innerhalb des Fensters verschoben werden

    das habe ich soweit hinbekommen hier ist meine klasse für das Quadrat
    Code:
    public class Kreis extends JPanel {
     public void paintComponent(Graphics g){
     g.setColor(Color.blue);
     int x = (int) (Math.random()*300);
     int y = (int) (Math.random()*300);
     g.fillRect(x, y, 50, 50);
     
     
     }
    aber wie bekomme ich ein ActionListener auf das Quadrat ??

    Im zweiten Programm geht es darum das es mir die SinusFunktion zeichnet und die Höhe und Breite der Zeichnung sollen der Höhe und Breite des Fensters entsprechen.
    Hierzu habe ich leider gar kein Ansatz kann mir dazu wer ein tipp geben wie ich Diagramme in Java mit Swing Zeichen kann ??

    und ne ganz andere frage neben bei wie kann ich an einer blieben stelle im Fenster ein ActionListener einbauen so das wenn man auf die stelle im Fenster drückt er mir dort ein Kreis zeichnet wie er den kreis zeichnen soll weiß ich schon aber nicht das mit dem ActionListiner an einer belieben stelle ich mein kein Button sondern einfach nur an einer belieben stelle.
     
  2. 31. Mai 2010
    AW: 2Fragen zu Swing

    1) kannst du evtl ein mouselistener registrieren und auf mouseClicked abfragen?

    2) wie du den sinus berechnet ist dir wohl klar, d.h. je feiner deine schritte desto mehr punkte bekommst du. du musst einfach dann punkte einzeichnen. Beispiel:

    sin(0) = 0 : x = 0; y = 0
    sin(1) = 0,017 : x = 1; y = 0,017
    sin(2) = 0,034 : x = 2; y = 0,034
    ...
    sin(360)

    wenn du jetzt den graph feiner zeichnen willst machst du kleinere schritte:

    sin(0)
    sin(0,5)
    sin(1)
    ...
    sin(360)

    gruß wollknoll
     
  3. 31. Mai 2010
    AW: 2Fragen zu Swing

    1) mouselistener geht dank dir

    2)aber da hätte ich noch ne frage und zwar wird die Maus über dem Fenster bewegt, soll der Funktionswert der Sinus-Funktion an der entsprechenden X-Koordinate ausgegeben werden. wird das auch über den mouselisteiner gemacht oder wie erfahr ich die Koordinate ?
     
  4. 31. Mai 2010
    AW: 2Fragen zu Swing

    also du hast geschrieben die höhe und breite soll an das fenster angepasst werden.
    angenommen die höhe ist 320 und die breite 720, dann weißt du ja das deine 0 linie bei 160pixel liegt und gleichtzeitig das deine sinuskurve maximal 160 hoch bzw tief sein darf.
    bei deiner breite weisst du, das du auf die 720 pixel genau 360 werte berechnen musst (genau 1mal die sinuskurve). d.h. alle 2 pixel punkt (wert) im graph.

    hier am beispiel, alle x werte mal 2 (für jeden 2 pixel) und y * 160 für maximal einer höhe von 160pixel:

    sin(0) = 0 : 0 * 2 = 0; 0 * 160 = 0
    sin(1) = 0,017 : 1 * 2 = 2; 0,017 * 160 = 2,72
    sin(2) = 0,034 : 2 * 2 = 4; 0,034 * 160 = 5,44
    usw usw

    d.h du zeichnest folgende punkte:
    p1(0,0)
    p2(2,2.72)
    p3(4,5.44)

    ich hoffe es versteckt sich kein fehler und du verstehst alles...
     
  5. 31. Mai 2010
    AW: 2Fragen zu Swing

    das habe ich schon verstanden aber mein problem ist es eher das in der methode umzusetzen was da oben steht ich weiß halt nicht wie ich die berechneten zahlen also die einzelnen punkte mit den g.drawline verbinden soll

    public class Sinus extends JPanel {
    double[] sinus = new double [360];
    public void paintComponent(Graphics g){
    for(int i = 0;i>=360;i++)
    {
    sinus = Math.sin( i )*160;

    }
    g.drawLine(x1, y1, x2, y2)


    }


    }
     
  6. 31. Mai 2010
    AW: 2Fragen zu Swing

    warum machst du nicht einfach ein Polygon? da wirfst du ein int[] für die x werte und ein int[]für die y werte rein, und er zeichnet dir das objekt wobei immer jeder wert im tab eine ecke bedeutet, sprich du musst nur die werte nahe genug beieinander berechnen damit die kurve nicht eckig wird.

    vorsicht noch bei Math.sin(), meines wissens will er da einen wert im bogenmass, nicht degree (also Math.roRadians(0...360); )

    mfg
     
  7. 31. Mai 2010
    AW: 2Fragen zu Swing

    ich hab es soweit aber er möchte nicht zeichnen irgendetwas sagt mir das an meiner forschleife falsch ist was meint ihr ??
    ich habe sowohl y als auch x mit [300] initilia initialisiert siert und npoints=300 gemacht aber es geht nicht
    -.-
    for (int i = 0; i <= npoints; i++) {
    xpoints = i;
    ypoints = (int) Math.sin(x / 180 * Math.PI);

    }

    und mit der methode zeichne ich es dann zumindest wenn es gehn würde
    public void paintComponent(Graphics g) {
    g.drawPolyline(xpoints, ypoints, npoints);
    }
     
  8. 31. Mai 2010
    AW: 2Fragen zu Swing

    wenn du ein array mit 300 feldern hast und das erste feld 0 ist, dann ist das letzte 299...
    d.h. du musst bis npoints - 1 iterieren.

    ansonsten erstell doch ein polygon objekt (
    Polygon (Java 2 Platform SE 5.0)
    ) und füg die werte mit addPoint hinzu.

    Code:
    Polygon poly = new Polygon();
    for (int i = 0; i <= npoints; i++) {
     poly.addPoint(i, (int) Math.sin(x / 180.0 * Math.PI)) ;
    }
    
    g.drawPolyline(poly);
    
    
     
  9. 1. Juni 2010
    AW: 2Fragen zu Swing

    hm ich bekomm die zweite aufgabe immer noch nicht hin der zeichnet mir immer noch nix das kann doch nicht sein -.-
     
  10. 1. Juni 2010
    AW: 2Fragen zu Swing

    salut

    habs dir schnell gecodet. mfg

    Code:
    package Sinus;
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    @SuppressWarnings("serial")
    public class Sinus extends JFrame{
     public static void main(String[] args) {
     new Sinus();
     }
    
     public Sinus() {
     super("sinus");
     jbInit();
     setVisible(true);
     }
     
     private void jbInit() {
     setSize(606,428);
     setLocationRelativeTo(null);
     setDefaultCloseOperation(EXIT_ON_CLOSE);
     Container cp = this.getContentPane();
     cp.add(new SinusPanel(),BorderLayout.CENTER);
     addMouseMotionListener(new MouseMotionListener() {
     public void mouseMoved(MouseEvent e) {
     int x = e.getX();
     if(x<0)
     x=1;
     if(x>getSize().width-17)
     x=getSize().width-17;
     SinusPanel.mousex = x;
     repaint();
     }
     public void mouseDragged(MouseEvent e) {}
     });
     }
    }
    
    @SuppressWarnings("serial")
    class SinusPanel extends JPanel {
     int[] xpoints;
     int[] ypoints;
     static int mousex = 50;
     
     public SinusPanel() {
     setSize(600,400);
     setLocation(0,0);
     }
     
     protected void paintComponent( Graphics g ){
     Graphics2D gc = (Graphics2D) g;
     gc.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
     int h = getSize().height;
     int w = getSize().width;
     // generation of the points
     xpoints = new int[w];
     ypoints = new int[w];
     
     for(int i = 0; i<w;i++) {
     xpoints[i] = i;
     ypoints[i] = h/2+(int)((h/2-50)*Math.sin(Math.toRadians(i+130.0)));
     }
     
     gc.setColor(Color.BLACK);
     gc.fillRect(0,h/2-1, w, 3);
     gc.fillRect(49, 0, 3, h);
     gc.setColor(Color.GREEN);
     gc.drawPolyline(xpoints, ypoints, xpoints.length);
     
     // mouseround
     gc.setColor(Color.BLACK);
     gc.drawOval(mousex-5, ypoints[mousex]-5, 10, 10);
     gc.drawLine(mousex-6,ypoints[mousex],mousex+6,ypoints[mousex]);
     gc.drawLine(mousex, ypoints[mousex]-6, mousex, ypoints[mousex]+6);
     
     // sinus
     gc.setColor(Color.BLACK);
     double x = (mousex-50);
     while(x>360)x-=360;
     double radianx = Math.round((100000)*(Math.toRadians(x)/Math.PI))/100000.0;
     double y =Math.round((-100000)*Math.sin(Math.toRadians(mousex+130.0)))/100000.0;
     gc.drawString("Punktattribute: x = "+x+" = "+radianx+"*PI ; y = "+y+";", 60, h-15);
     }
    }
    
    *edit* habs noch ein bisschen getunt, macht so noch n bisschen mehr her
     
  11. 1. Juni 2010
    AW: 2Fragen zu Swing

    super vielen dank habe es noch ergänzt mit einem mousemotionlistener damit er mir die Koordinaten auch auf einem textfeld anzeigt ich danke euch beiden sehr.
     
  12. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.