2017-04-19 21 views
0

絶対配置はお勧めしませんが、自分の位置を無作為にばらばらにしてランダムに表示する必要があります。 私はsetBoundsの使い方を研究しましたが、動作していないようです。次のコードは、フローレイアウトのラベルを示しています。setLayout(null)を使用すると、空のフレームが表示されます。Java swing GUI絶対配置

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); 
} 

、これは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); 
} 

}

問題が何であるかを調べることで任意のヘルプを拡張するクラス "デバイス" で、理解されるだろう。

+0

*「私は私のラベルがランダムに散在表示さだけでなく、ランダムに自分の位置を変更する必要があります」* - そのためのレイアウトマネージャがあります - [例えば](http://stackoverflow.com/questions/27974966/moving-jpasswordfield-to-absolute-position/27975101#27975101)と[example](http://stackoverflow.com/question/11819669/absolute-positioning-graphic-jpanel-inside-jframe-blank-by-blank-sections/11822601#11822601) – MadProgrammer

+0

[例](http://stackoverflow.com/questions/17847816/position-image- in-any-screen-resolution/17848635#17848635) – MadProgrammer

答えて

1

次のコードは、フローレイアウトのラベルを示しています。setLayout(null)を使用すると、空白のフレームが表示されます。

レイアウトマネージャは、コンポーネントのサイズと位置を設定します。

レイアウトマネージャを使用しない場合は、各コンポーネントのsizeおよびlocationを設定する必要があります。

通常、サイズはコンポーネントpreferred sizeと同じに設定されます。

また、ランダムに生成されたx/y値を表示しましたか?おそらく値がパネルのサイズよりも大きいかもしれません。

setLayout(null)を使用すると、空白のフレームが表示されます。

nullに設定されているレイアウトは何ですか。フレームのパネル。あなたのコードは上記の方法を使用しません。問題を引き起こすために使用するコードを投稿します。私たちはあなたが何をしているのか、していないのかを推測したくありません。 @CasparNoreeへ

+0

私はしようとしましたpane.setLayout(null )および/またはthis.setLayout(null)...はまだ空のフレームを入れました。ランダム関数はフレームサイズの範囲内でminとmaxによって設定されます。 – MNS

+0

@MNS、 'ランダム関数は、フレームサイズの範囲内でminとmaxによって設定されます.' - それを行うコードはどこですか?もう一度あなたの答えに私のコメントを参照してください。使用しているコードを実際に投稿しない限り、あなたがしていることが正しいかどうかはわかりません。私たちに推測させないでください! – camickr

0

ありがとう...答えは最初からJapnelを初期化することを示唆した。

JPanel pane = new JPanel(null); 
+0

はい、パネルにコンポーネントを追加する前にレイアウトを設定する必要があります。そのため、実際にテストしているコードを投稿するときに、私が提案した理由があります。何度も言葉の説明が実際のコードを正確に反映していないので、あなたが何をしていると言っているのではなく、あなたが何をしているのかを見る必要があります。 – camickr