通常,setBounds()方法將被調用對象定位在指定的位置和指定的大小。 我創建了一個JFrame類,並使用setLayout(null)設置了一個按鈕。 然後我創建了一個擴展JPanel並在其中放置一些組件的類。 這些組件的邊界在方法內部設置。 該類的一個對象包含在擴展JFrame的類中。 然後這個對象調用setBound()方法。 但是結果並未顯示JPanel擴展類中的組件。下面給出了cde片段。爲什麼setBounds()方法即使在將setLayout()設置爲null之後也不起作用?
class Administrator extends JFrame implements ActionListener
{
public Administrator()
{
setTitle("Administration");
setSize(500,500);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(null);
JButton newbutton=new JButton(" New.. ");
newbutton.addActionListener(this);
add(newbutton);
newbutton.setBounds(100,100,100,25);
setVisible(true);
public static void main(String arg[])
{
new Administrator();
}
public void actionPerformed(ActionEvent ae)
{
String act=(String)ae.getActionCommand();
if(act.equals("New Registry..")||act.equals(" New.. "))
{
regPanel rgpnl=new regPanel();
Dimension sz;
sz=rgpnl.getPreferredSize();
rgpnl.setBounds(800,800,sz.width,sz.height);
rgpnl.arrangeComponents();
add(rgpnl);
repaint();
setVisible(true);
}
}
class regPanel extends JPanel
{
Label namelab;
JTextField name;
JButton do_register;
public regPanel()
{
//Container = get();
setLayout(null);
namelab=new Label("Name :");
name=new JTextField(20);
add(namelab);
add(name);
add(do_register);
}
public void arrangeComponents()
{
Dimension size;
size=namelab.getPreferredSize();
namelab.setBounds(20,10,size.width,size.height);
name.getPreferredSize();
name.setBounds(150,10,size.width,size.height);
do_register.setBounds(10,10,size.width,size.height);
repaint();
}
}
您在代碼中缺少一些''''和導入,使它真正實現了粘貼編譯運行。 – 2010-12-20 16:08:26