首先贴出我的代码:public class Qlogin extends JFrame{

JLabel jl;   //上部
//下部
JPanel jp1;  
JButton jp1_jb1,jp1_jb2,jp1_jb3;

public static void main(String args[]){
Qlogin ql = new Qlogin();
} public Qlogin(){
//上部组件
jl = new JLabel(new ImageIcon("image/1.jpg"));

this.add(jl,"North");
this.setSize(350,250);
        
//下部
jp1 = new JPanel();
jp1.setLayout(null);
// jp1.setBounds(0, 200, 350, 50);
   //       jp1.setSize(250,100);
// jp1.setPreferredSize(new Dimension(250,100));
//        pack();
         jp1_jb1 = new JButton("多账号");
  jp1_jb2 = new JButton("设置");
jp1_jb3 = new JButton("登录");
jp1_jb1.setBounds(0,180,80,30);
jp1_jb2.setBounds(100,180,80,30);
jp1_jb3.setBounds(250,180,80,30);
//       jp1_jb1.setSize(100,50);
//       jp1_jb2.setSize(100,50);
// jp1_jb1.setPreferredSize(new Dimension(150,50));
jp1.add(jp1_jb1);
jp1.add(jp1_jb2);
jp1.add(jp1_jb3);
this.getContentPane().add(jp1,"South");

                 //显示图标。
                  setIconImage(Toolkit.getDefaultToolkit().getImage("image/head.png"));
         
                  this.setDefaultCloseOperation(HIDE_ON_CLOSE);
                  this.setVisible(true);
}
}
我想模仿qq的登录界面,这个代码中间的部分还没写,但就遇到了几个问题。这个代码没有显示上面的3个button。
几个问题:
1.网上说要改变button的大小。要么用空布局,然后用setSize()或setBounds()改变大小;要么用setPreferredSize改变大小。但根据这个代码,我只要用空布局就不会显示button,用默认布局才会显示,但显示的button大小仍是布局管理器给定的那个大小,不是我设定的。
2.setIconImage(Toolkit.getDefaultToolkit().getImage("image/head.png"));这句显示图标不再是coffee了。但是显示出来的图片几乎看不清,太小了。有上面办法解决吗?
3.上部的图片显示占据了整个窗口,请问有没有设定图片的办法?还是用photoshop手动将图片改小?
一个这么短的代码就发现这么多问题55~求高手指点。

解决方案 »

  1.   

    刚才又调试了下,空布局下button用setPreferredSize能改变大小,但是到了一定他的2个值到了一定范围,会使button上面的字看不清。。并且我想调整button的位置,这个不能调位置。还有如果用空布局该怎么弄?
      

  2.   

    setLayout(null);
    jbutton.setBounds(x,y,w,h);
    add(jbutton);
      

  3.   

    lz真可怜,还要自己一直顶。。还不知道有没有人回答...T_T
      

  4.   

    建议不用新加一个面板,直接用3楼那个总布局设置为setLayout(null);
    对于按钮的是jbutton.setBounds(x,y,w,h);
    add(jbutton);
    就可以了
    对于上部分的那个图片加到标签里面可以setBounds设置大小。
      

  5.   

    1.用setPreferredSize()可以改变大小。我想改变下位置,所以还是要用setBounds,但是用空布局时,最后一个button没有显示,全屏时下面整个空间就是最后一个button。为什么最后一个button没有显示出来。
    2.图片用setBounds貌似是截取了部分区域,但我想按比例的缩放,这个可以用什么方法?还是自己先把图片处理成那么大小格式的?
    3.还是取代咖啡图片的问题,怎么把这个图片变大。
      

  6.   

    ------------------------------------------
    应为QQ登录界面的窗口是固定大小的[frame.setResizable(false);]
    所以所有组件的大小位置都是固定的
    就直接用[frame.setLayout(null);button.setBounds(x,y,w,h);]就好了;
    LZ可以吧QQ的登录界面截图,然后放到Photoshop中拉参考线看位置和大小;
    -----------------------------------------
    关于图标的问题:
    建议LZ用原来QQ的.ico图标.
    因为Java不支持.ico格式
    所以先将.ico转换为N张.png格式的图标
    然后[frame.setIconImages(imageList);]
    具体看我的百度空间日志:
    http://hi.baidu.com/%D4%C2%CF%C2%B9%C2%BA%E8%D3%B0_f/blog/item/b63cc1086d019b29b0351dd4.html
      

  7.   

    11L不错嘛,还有没有其他高科技的方法?本来我知道qq登录界面是固定大小的,只是怕以后碰到这样的问题,所以就问问了。就是一个Jframe里面大体上分几个部分,每个部分的布局又不同,要设置按钮,按钮的位置可以自己指定,但整个界面缩放时,按钮的相对位置不变。。
      

  8.   

    --------------------------------------------
    这自然是使用布局了
    至于使用什么布局,那就看情况而定
    但很多时候一个布局是不能解决问题的
    所以可以再一个JFrame中放置你个JPanel
    将JFrame划分成不同区域再分别使用布局
    也就是布局的嵌套
    --------------------------------------------
    建议楼主去学习使用各种不同的布局
    这样自然就能等到你自己想要的结果
      

  9.   

    如果使用的是null布局,那么就可以使用setBounds(x,y,a,b)来指定组件的位置和大小
    如果使用其他布局,那么组件的位置就要根据布局的相关情况来定,大小可以通过setSize(x,y)方法来指定
      

  10.   

    在用空布局是一定要制定组建的 大小、位置
    有两种方式:
    1.setBounds(x,y,width,height)
    2.setLocation(x,y)和setSize(width,height)注:方法二的两句代码合起来等价于方法一的一句代码。