簡體   English   中英

Java Swing GUI絕對定位

[英]Java swing GUI absolute positioning

我知道不推薦使用絕對定位,但我需要顯示隨機分散的標簽以及隨機改變它們的位置。 我研究了如何使用 setBounds 但它似乎不起作用。 以下代碼顯示 Flow Layout 中的標簽,當我使用 setLayout(null) 時,它顯示一個空白框架。

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

}

任何幫助找出問題所在,將不勝感激。

以下代碼顯示 Flow Layout 中的標簽,當我使用 setLayout(null) 時,它顯示一個空白框架。

布局管理器設置組件的大小和位置。

如果您不使用布局管理器,那么您負責設置每個組件的sizelocation

通常我會將大小設置為等於組件的preferred size

另外,您是否顯示了隨機生成的 x/y 值? 也許這些值大於面板的大小。

當我使用 setLayout(null) 時,它顯示一個空白框架。

什么布局設置為空? 框架的面板。 您的代碼未使用上述方法。 發布用於導致問題的代碼。 我們不想猜測您可能會或可能不會做什么。

感謝@CasparNoree ...建議的答案是從一開始就初始化Japnel:

JPanel pane = new JPanel(null);

當您將布局設置為 null 時,您可以使用坐標手動設置邊界。

JFrame jf = new JFrame();
JPanel p = new JPanel();
JButton jb = new JButton();

// this is where you make it so setting the bounds actually does something
p.setLayout(null);
jb.setBounds(100,100,100,100);
p.add(jb);
jf.add(p);
jf.setVisible(true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM