当前位置: 代码迷 >> Java相关 >> 为什么用show()和pack();setvisible()显示出来的图不一样?
  详细解决方案

为什么用show()和pack();setvisible()显示出来的图不一样?

热度:433   发布时间:2007-05-30 11:48:06.0
为什么用show()和pack();setvisible()显示出来的图不一样?

import java.util.*;
import java.awt.*;
import javax.swing.*;
public class FourTimer extends JFrame
{
Watch watch=new Watch();
public FourTimer()
{
super("时间显示");
setSize(200,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pan=new JPanel();
pan.setLayout(new GridLayout(1,1,15,15));
pan.add(watch);
setContentPane(pan);
}
public static void main(String[] args)
{
JFrame time=new FourTimer();
time.pack();
time.setVisible(true);

}
}
class Watch extends JPanel implements Runnable
{
Thread runner;
Watch()
{
if(runner==null)
{
runner=new Thread(this);
runner.start();
}
}
public void run()
{
while(true)
{
repaint();
try {
Thread.sleep(1000);
}
catch (InterruptedException ex) {

}
}
}
public void paintComponent(Graphics ss)
{
Graphics2D ss2D=(Graphics2D)ss;
Font type=new Font("Serif",Font.BOLD,12);
ss2D.setFont(type);
ss2D.setColor(getBackground());
ss2D.fillRect(0,0,getSize().width,getSize().height);
GregorianCalendar day=new GregorianCalendar();
String time=day.getTime().toString();
ss2D.setColor(Color.red);
ss2D.drawString(time,5,25);
}
}
如果用上面的就会显示出这样的图形:


如果是 用show();就正常.
但在JDK1.6中不能用show();只有用pack();setVisibel();,这样一来就显示不正常了,还是我的代码有问题??
搜索更多相关的解决方案: pack  setvisible  show  pan  import  

----------------解决方案--------------------------------------------------------

你既然设了大小,就不要去pack了

pack一下就会把你的窗口压缩到能最小能显示为止

如果你的JPanel设置一下PreferredSize,就pack不了了


----------------解决方案--------------------------------------------------------
哦,原来还有这一手啊!!!!!!Thank You!!!!!!!!!!!!!!!
----------------解决方案--------------------------------------------------------
show()
和visible()是一样的 !
----------------解决方案--------------------------------------------------------
前两个是awt组件,后一个是swing组件,推荐用swing 组建
----------------解决方案--------------------------------------------------------
  相关解决方案