我建了一个GUI,但难看之极,我其中有两个jpanel,每个都有一些组件,我希望能控制jpanel 以及其中组件的大小和位置,但setBounds还是setSize,一点作用都没有,快急死了,求教大家怎么帮我改改.import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.event.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JPanel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.DefaultListModel;public class weather extends JFrame {    private String[] entries={"1","22","333","4444"} ;
 
    private JTextField country; 
    private JList jl;
    private JTextField latitude;
    private JTextField currentTime;
    private JTextField wind;
    private JTextField visibilityField;
    private JTextField skycondition;
    private JTextField dewpoint;
    private JTextField relativehumidity;
    private JTextField presure;
    private JButton search;
    private DefaultListModel listModel;
    
    private JPanel p1,p2;
    
    public weather() {
       
       setUpUIComponent();
        setTitle("Weather Report ");
        setSize(600, 400);
        setResizable(false); 
        setVisible(true);
    }
    
    private void setUpUIComponent(){       p1 = new JPanel();
        p2 = new JPanel();
  
       country=new JTextField(10);
       latitude=new JTextField(12);
        currentTime=new JTextField(12);
        wind=new JTextField(12);
        visibilityField=new JTextField(12);
        skycondition=new JTextField(12);
        dewpoint=new JTextField(12);
        relativehumidity=new JTextField(12);
        presure=new JTextField(12);
        search=new JButton("SEARCH");
        
        listModel = new DefaultListModel();
        jl = new JList(listModel);
        
       // jl=new JList(entries);
        JScrollPane jsp=new JScrollPane(jl);
        
        jl.setVisibleRowCount(8);
        jsp.setBounds(120,120,80,80);
         
        p1.add(country);
        p1.add(search);
        p1.add(jsp);
        
        p2.add(new JLabel("latitude"));
        p2.add(latitude);
        p2.add(new JLabel("time"));
        p2.add(currentTime);
        p2.add(new JLabel("wind"));
        p2.add(wind);
        p2.add(new JLabel("visibility"));
        p2.add(visibilityField);
        p2.add(new JLabel("skycondition"));
        p2.add(skycondition);
        p2.add(new JLabel("dewpoint"));
        p2.add(dewpoint);
        p2.add(new JLabel("relativehumidity"));
        p2.add(relativehumidity);
        p2.add(new JLabel("presure"));
        p2.add(presure);
        
        this.getContentPane().setLayout(new FlowLayout()); 
        this.setLayout(new GridLayout(1,2));        p2.setLayout(new GridLayout(8, 2));
      
        this.add(p1);
        this.add(p2); 
              }     public static void main(String[] args) {
        
         JFrame frame = new weather();
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     }}

解决方案 »

  1.   

    你要手动设置组件的位置的大小和位置的话,必需把那个容器的布局管理器设置为null
    如:
       p2.setLayout(null); 
      

  2.   


    试了p2.setLayout(null),后p2中的东西就都没有了,能不能请你把代码写出来,谢谢
      

  3.   

    额!这个有点麻烦! 
    那个容器的布局管理器设置为null 后
    每个组件都要设置它们的位置,有点难调
      

  4.   

    可以直接用netBeans拖拽控件,
    非要自己写试试用GridBagLayout布局
      

  5.   

    Java中布置控件的位置有些确实不好做。
    但是可以用别的可以拖拽的控件。