站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题关于框架的问题

关于框架的问题

摘要: 关于框架的问题


我创建了一个框架,想在上面加一个JPanel p1,p1上加了两个JButton,把p1加到JFrame上后,怎么不显示p1呢??


代码?



import java.awt.*;

import javax.swing.*;
public class K
{
public JFrame frame = new JFrame("seal");
public JPanel p1;
public JPanel content;
public JPanel p2;

public JButton one;
public JButton two;
public ButtonGroup bg;

public K()
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
init();

}catch(Exception e)
{}

}
public void init()
{
//content = (JPanel) getContentPane();
frame.setSize(600,400);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height)
{
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width)
{
frameSize.width = screenSize.width;
}
frame.setLocation( (screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
frame.setVisible(true);
frame.setResizable(false);


one = new JButton("A");
two = new JButton("B");
p1 = new JPanel();
p1.setLayout(new FlowLayout());
p1.add(one);
p1.add(two);

//p1.setSize(100,100);
frame.add(p1);
//content.add(p1);



}

public static void main(String[] args)
{
new K();
}



请多帮忙!!!谢谢!


// p1.setSize(100,100);
frame.getContentPane().add(p1);
frame.validate();
// content.add(p1);

改成这样就可以了




import java.awt.*;

import javax.swing.*;
public class K
{
public JFrame frame = new JFrame("seal");
public JPanel p1;
public JPanel content;
public JPanel p2;

public JButton one;
public JButton two;
public ButtonGroup bg;

public K()
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
init();

}catch(Exception e)
{}

}
public void init()
{
//content = (JPanel) getContentPane();
frame.setSize(600,400);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height)
{
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width)
{
frameSize.width = screenSize.width;
}
frame.setLocation( (screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);




one = new JButton("A");
two = new JButton("B");
p1 = new JPanel();
p1.setLayout(new FlowLayout());
p1.add(one);
p1.add(two);

//p1.setSize(100,100);

//改变一下语句顺序就可以了
content.add(p1);
frame.setVisible(true);
frame.setResizable(false);
//



}

public static void main(String[] args)
{
new K();
}
}


非常感谢!!搞定!
可我还不清楚到底为什么是那样的顺序,能帮我解释一下吗?



public void validate()

验证此容器及其所有子组件。
使用 validate 方法会使容器再次布置其子组件。已经布置容器后,在修改此容器的子组件的时候(在容器中添加或移除组件,或者更改与布局相关的信息),应该调用上述方法。



content.add(p1);的作用是把p1添加到frame的面板上,如果放在frame.setVisible(true);之后,那执行frame.setVisible(true);的时候还没有p1,当然不会显示出来。


↑返回目录
前一篇: 【菜鸟求助】如何将四个数组在同一个窗口输出?
后一篇: 框架问题