我做一个排球计分系统,窗口中有很多个标签!
如何最简单的准确定位他们各个的位置。
问题一:
有setBounds(int x,int y,int width,int height),如果用setBounds定位各个标签或者按钮的话,那会不会太麻烦了,我的JButton加JLabel数目将近有20个! 
那可以用什么布局办法来解决我的问题呢。
(我用过布局管理器FlowLayout()......等等,效果都不理想。我也用过添加几个容器JPanel,再把标签加入到这几个容器中,再用布局管理器,效果也不理想。用GridBagLayout()用不来..不会用,感觉不太懂..熟练的也可以简单教我下GridBagLayout()..)
问题二:
如果用setBounds(int x,int y,int width,int height),我其中有的JLabel是存放了图片的。
①那width,height(宽度和高度)需要设置成什么呢?因为其图片本身就存在高度很宽度的啊。
②如果强行设置width和height,那会不会压缩图片?有点啰嗦! 望大家帮助!

解决方案 »

  1.   

    jdk自带的布局管理器不是太简单,就是太繁杂。
    我使用 JGoodies FormLayout。开始之前先找张纸画个草图,确定布局方案,然后放置组件。
      

  2.   

    GridBagLayout 这个得先从API着手,多练才能熟悉
      

  3.   

    空布局最好的,建议你试一下,到时候在main在加个lookandfeel,界面会变的蛮漂亮的
      

  4.   

    这是我写的例子
    public class Imageshow extends JFrame{
    public Imageshow(){
    JLabel r1=new JLabel("");
    //Label r2=new Label("得分:");

    ImageIcon ima=new ImageIcon(("C:\\Users\\vane\\Desktop\\火箭队.jpg"));
    r1.setIcon(ima);
    add(r1);
    r1.setBounds(300,100,1,1);
    setVisible(true);
    setSize(700, 500);
    //setBackground(Color.red); 
    }
    public static void main(String args[]){
    Imageshow f=new Imageshow();
    f.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    }
    为什么无论我如何改变r1.setBounds()的前面两个值,即坐标。
    图片总是显示窗口左边中间的位置呢?
      

  5.   

    你需要先把JFrame布局管理器从默认的BorderLayout改为 null;
      

  6.   

    我在改成了 public static void main(String args[]){
    Imageshow f=new Imageshow();
    f.setDefaultCloseOperation(EXIT_ON_CLOSE);
    f.setLayout(null);
    }
    运行后发现窗口什么都没显示怎么会这样。。
      

  7.   

        r1.setBounds(300,100,1,1);
    宽/高都是1,你怎么看的到?
      

  8.   

    package com.cn.csuinfo;import java.awt.BorderLayout;import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;/**/
    public class Imageshow extends JFrame{
        public Imageshow(){
        JLabel r1=new JLabel("");
        //Label r2=new Label("得分:");
        this.setLayout(new BorderLayout());
        
        ImageIcon ima=new ImageIcon(("src\\com\\cn\\csuinfo\\1.jpg"));
        r1.setIcon(ima);
        add(r1,BorderLayout.EAST);//此处改用BorderLayout
        r1.setBounds(300,100,1,1);
        setVisible(true);
        setSize(700, 500);
        //setBackground(Color.red); 
        }
        public static void main(String args[]){
            Imageshow f=new Imageshow();
            f.setDefaultCloseOperation(EXIT_ON_CLOSE);
            //f.setLayout(null);
        }
        }用BorderLayout布局啊!
      

  9.   

    你好!
    ①:为什么用了setBounds(int x,int y,int width,int height)还要用this.setLayout(BorderLayout())以及add(r1,BorderLayout.EAST);布局呢?
    ②:而且,窗口默认的布局方式不是FlowLayout()吗?
    我初学!,多多帮助!
      

  10.   

    如果是图片标签的话
    ①那width,height(宽度和高度)需要设置成什么呢?因为其图片本身就存在高度很宽度的啊。
    ②如果强行设置width和height,那会不会压缩图片?