2012-06-03 62 views
-1

我在显示包含特定坐标(40,80)处的图像的此JLabel时遇到问题。任何人都可以告诉我我在这里做错了什么?Java JPanel坐标系

import java.awt.Image; 
import java.awt.Toolkit; 
import javax.swing.*; 

public class Window extends JFrame{ 
//the pictures 
JLabel guy = new JLabel(new ImageIcon("tester.gif")); 
JPanel panel = new JPanel(); 

Window(){ 

    super("WindowTitleThing"); 
    setSize(700,600); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    guy.setAlignmentX(40); 
    guy.setAlignmentY(80); 

    add(panel); 
    panel.add(guy); 

    setVisible(true); 
} 
} 

回答

1

我没有看到你在代码中某处设置了JPanel的布局管理器。 使用Swing时,每个容器都有一个LayoutManager,它处理组件在相应容器上的放置(有关如何使用布局管理器,请参阅http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html)。

如果你想将你的组件以固定坐标像你的情况,你应该设置绝对布局上您的JPanel:

panel.setLayout(null); 

,然后你可以把你想用的setBounds方法添加组件:

guy.setBounds(x,y,width,length); 

Althogh我会使用布局管理器为更大的用户界面。

+0

谢谢,这非常有帮助!最后我得到这个程序的工作! :) –

1

这不是setAlignmentX和setAlignmentY的工作方式或它们的用途。它们的浮点值为0.0f,0.5f或1.0f,以帮助持有组件的容器决定放置它的位置。请阅读这些方法的API。无论如何,不​​是将硬件编码数据放在组件上,而是从长远来看,使用布局管理器,让他们设置组件的首选大小和位置会更好。