2016-05-18 17 views
0

Also habe ich den anderen Beitrag ausgecheckt, der hier nicht geholfen hat, ich versuche meinen Rahmen mit seiner Nachricht zu bekommen, um zufällig auf einem Bereich auf dem Bildschirm zu erscheinen aber wenn ich es laufen, sagt sie x und y kann nicht zu einer variablen aufgelöst werden, hier ist der Code:Wie man einen JFrame zufällig mit einer einfachen Nachricht einstellt

public class MyFrame extends JFrame{ 
     MyFrame(int width, int height, int x, int y){ 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setTitle("R and Ts Main Frame"); 
     setSize(width, height); 

     Random random = new Random(); 
     x = random.nextInt(); 
     y = random.nextInt(); 
     setLocation(x, y); 

     JLabel label = new JLabel("Random Message"); 
     label.setFont(new Font("Impact", Font.BOLD|Font.PLAIN, height/3)); 
     label.setForeground(Color.BLUE); 
     getContentPane().add(label); 
} 

}

und das ist mein Haupt:

public class OurMain { 

    public static void main(String[] args) { 
    Dimension sSize = Toolkit.getDefaultToolkit().getScreenSize(); 
    int w = sSize.width; 
    JFrame f = new MyFrame(w/3, 100, x, y); //my errors are underlined here under the x and y 
    f.setVisible(true); 
} 

}

+0

In Ihrer Hauptklasse deklarieren oder deklarieren Sie keine Werte für 'x' und' y'. –

+0

gut in meiner Hauptklasse, die das Programm 'OurMain' startet ich einfach x und y im MyFrame-Konstruktor ist es in meiner 'MyFrame' -Klasse, die ich ihnen zufällig zugewiesen ihnen richtig? also wie würde ich das machen? – NarinderRSharma

+0

Da Sie ihnen im Konstruktor zufällige Werte zuweisen, würde ich empfehlen, sie im Konstruktor zu deklarieren, anstatt sie an sie zu übergeben. –

Antwort

-1

Sie sollten nur einige Attribute hinzufügen und einige Dinge ersetzen:

MyFrame:

public class MyFrame extends JFrame { 

    int x; 
    int y; 

    MyFrame(int width, int height, int x, int y) { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setTitle("R and Ts Main Frame"); 
     setSize(width, height); 
     this.x = x; 
     this.y = y; 
     setLocation(x, y); 

     JLabel label = new JLabel("Random Message"); 
     label.setFont(new Font("Impact", Font.BOLD | Font.PLAIN, height/3)); 
     label.setForeground(Color.BLUE); 
     getContentPane().add(label); 
    } 
} 

OurMain:

public class OurMain { 

    public static void main(String[] args) { 
     Dimension sSize = Toolkit.getDefaultToolkit().getScreenSize(); 
     int w = sSize.width; 
     Random random = new Random(); 
     int x = random.nextInt(); 
     int y = random.nextInt(); 
     JFrame f = new MyFrame(w/3, 100, x, y); //my errors are underlined here under the x and y 
     f.setVisible(true); 
    } 
} 


EDIT:
jedoch random.nextInt(); ist keine gute Idee, weil Sie Ihre Bildschirmbreite & heigth etwas weniger als 2^32 Pixel ... so würde ich es zB begrenzen:

public static void main(String[] args) { 
     Dimension sSize = Toolkit.getDefaultToolkit().getScreenSize(); 
     int w = sSize.width; 
     int h = sSize.height; 
     int x = (int)((Math.random()* w) - w/3); 
     int y = (int)((Math.random()* h) - 100); 
     System.out.println(x + " " + y); 
     JFrame f = new MyFrame(w/3, 100, x, y); 
     f.setVisible(true); 
} 

EDIT von EDIT:

public class OurMain { 

    public static void main(String[] args) { 
     Dimension sSize = Toolkit.getDefaultToolkit().getScreenSize(); 
     int w = sSize.width; 
     int h = sSize.height; 

     Random rand1 = new Random(); 

     int randomWidth = rand1.nextInt(w); 
     int randomHeight = rand1.nextInt(h); 

     Random rand2 = new Random(); // I would still use rand1 

     int randomX = rand2.nextInt(w - randomWidth + 1); 
     int randomY = rand2.nextInt(h - randomHeight + 1); 

     JFrame f = new MyFrame(randomWidth, randomHeight, randomX, randomY); 
     f.setVisible(true); 
    } 
} 
+0

Okay, es passiert einfach, dass es ein paar andere Dinge gibt, die ich vergessen habe. Ich brauchte den Rahmen, um eine zufällige Größe zu haben, die ich durch Hinzufügen eines anderen Rands erreichte: – NarinderRSharma

+0

@NarinderRSharma seit ich weiß, dass du 'Random' Klasse bevorzugst entsprechend deiner letzten Frage/Kommentar. Sie sollten auch wahrscheinlich Ihre "zufällige Nachricht" skalieren. JLabel – Yev

+0

nein es funktioniert Ich versuche herauszufinden, wie pack() in meinem Etikett, um den Text die gleiche Größe wie der Rahmen, aber ich habe Probleme – NarinderRSharma

3

Dies wird Ihr Problem lösen. Sie haben x und y nicht deklariert/erstellt, bevor Sie sie verwenden, aber Sie brauchen sie nicht, also verwenden Sie sie nur lokal.

public class OurMain { 
    public static void main(String[] args) { 
     Dimension sSize = Toolkit.getDefaultToolkit().getScreenSize(); 
     int w = sSize.width; 

     Random random = new Random(); 
     int x = random.nextInt(sSize.width); 
     int y = random.nextInt(sSize.height); 

     JFrame f = new MyFrame(w/3, 100, x, y); 
    } 
} 

public class MyFrame extends JFrame { 

    private static final long serialVersionUID = 1L; 

    public MyFrame(int width, int height, int x, int y) { 
     super(); 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setTitle("R and Ts Main Frame"); 
     setSize(width, height); 

     setLocation(x, y); 

     JLabel label = new JLabel("Random Message"); 
     label.setFont(new Font("Impact", Font.BOLD | Font.PLAIN, height/3)); 
     label.setForeground(Color.BLUE); 

     getContentPane().add(label); 
     setVisible(true); 
    } 
} 

Ergebnis (es an einem anderen Ort jedes Mal geladen wird):

Screen print

+0

Es zeigt keine Fehler, es scheint zu laufen, aber meine Nachricht oder Rahmen wird nicht angezeigt. kann jemand versuchen, es in ihrem Programm laufen zu lassen? Ich benutze Eclipse. vielleicht ist es meine Schrift oder etwas mit meinem Rahmen zu tun. aber ich schwöre alles sieht gut aus – NarinderRSharma

+0

LO, ich habe vergessen, was Sie wollten, den Code zu tun, ich habe nur die Fehler behoben, sollte es jetzt funktionieren. – UDKOX

+0

Wie kontaktiere ich Sie? Ich habe mir dein Profil angeschaut, ich brauche Hilfe, aber es gibt keinen Nachrichtenknopf oder irgendetwas, das dir senden oder dich erreichen könnte. – NarinderRSharma

Verwandte Themen