2017-04-19 3 views
0

Ich weiß, dass die absolute Positionierung nicht empfohlen wird, aber ich muss meine Labels zufällig verteilt zeigen sowie ihre Positionen zufällig ändern. Ich habe recherchiert, wie man setBounds verwendet, aber es scheint nicht zu funktionieren. Der folgende Code zeigt die Beschriftungen in einem Ablauflayout. Wenn ich setLayout (null) verwende, wird ein leerer Rahmen angezeigt.Java Swing GUI absolute Positionierung

public class GUI extends JFrame{ 

device mobiles[]; 
device station; 
JPanel pane= new JPanel(); 
public GUI() 
{ 
    setTitle("communication is Key"); 
    setSize(1000, 1000); 
    setResizable(false); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    pane.setBackground(Color.WHITE); 
    int x=0; int y=0; 
    mobiles= new device[10]; 
    for (int i = 0; i < 10; i++) { 
     x=randInt(); 
     y=randInt(); 
      mobiles[i]= new device(1,x,y); 
      pane.add(mobiles[i]); 

    } 
    x=randInt(); 
    y=randInt(); 
    station = new device(0,x,y); 
    pane.add(station); 

    this.add(pane); 
} 

und das ist Klasse "Geräte", die JLabel

public class device extends JLabel{ 
ImageIcon mob = new ImageIcon("mob.png"); 
ImageIcon tow = new ImageIcon("tower.png"); 

public device(int num, int x, int y) 
{ if(num==1) 
    this.setIcon(mob); 
else this.setIcon(tow); 

this.setBounds(x, y, 3, 7); 
} 

}

herauszufinden, jede Hilfe erstreckt, was das Problem ist, würde geschätzt werden.

+0

* „aber ich brauche meine Etiketten zufällig als zufällig auch verstreut zeigen, ihre Positionen zu ändern“ * - Dazu gibt es einen Layout-Manager - [zum Beispiel] (http://stackoverflow.com/questions/27974966/moving-jpasswordfield-to-absolute-position/27975101#27975101) und [Beispiel] (http://stackoverflow.com)/questions/11819669/absolute-positioning-graphic-jpanel-innen-jframe-blocked-by-blank-abschnitte/11822601 # 11822601) – MadProgrammer

+0

[Beispiel] (http://stackoverflow.com/questions/17847816/position-image- In-jedem-Bildschirm-Auflösung/17848635 # 17848635) – MadProgrammer

Antwort

1

Der folgende Code zeigt die Beschriftungen in einem Flow-Layout. Wenn ich setLayout (null) verwende, wird ein leerer Rahmen angezeigt.

Der Layout-Manager legt Größe und Position der Komponente fest. Wenn Sie den Layout-Manager nicht verwenden, sind Sie dafür verantwortlich, size und location jeder Komponente festzulegen.

Normalerweise würde ich die Größe auf die Komponenten preferred size gleich setzen.

Haben Sie auch den zufällig generierten x/y-Wert angezeigt? Vielleicht sind die Werte größer als die Größe des Panels.

und wenn ich setLayout (null) verwende, zeigt es einen leeren Rahmen.

Welches Layout ist auf null gesetzt? Das Panel des Rahmens. Ihr Code verwendet die obige Methode nicht. Veröffentlichen Sie den Code, den Sie verwenden, um das Problem zu verursachen. Wir wollen nicht erraten, was Sie tun oder nicht tun können.

+0

Ich versuchte pane.setLayout (null) und/oder this.setLayout (null) ... säte noch einen leeren Rahmen. und die Zufallsfunktion wird durch min und max innerhalb des Bereichs der Rahmengröße eingestellt. – MNS

+0

@MNS, 'und die Zufallsfunktion wird von min und max innerhalb des Bereichs der Rahmengröße gesetzt - wo ist der Code, der das tut. Nochmal auf meinen Kommentar in deiner Antwort. Wenn Sie den von Ihnen verwendeten Code nicht wirklich veröffentlichen, können wir nicht sagen, ob das, was Sie tun, korrekt ist. Lass uns nicht raten! – camickr

0

dank @CasparNoree ... die Antwort vorgeschlagen war die Japnel von Anfang an zu initialisieren:

JPanel pane = new JPanel(null); 
+0

Nun ja, das Layout muss eingestellt werden, bevor Sie Komponenten zum Panel hinzufügen. Deshalb habe ich vorgeschlagen, dass Sie bei der Eingabe von Code den Code posten, mit dem Sie gerade testen. Wir müssen sehen, was Sie tun, nicht was Sie sagen, dass Sie tun, weil oft die verbale Beschreibung Ihren wirklichen Code nicht genau widerspiegelt. – camickr