import javax.swing.*;
import java.awt.*;
public class MyJPanelTest extends JFrame{
    JFrame frame;
    JPanel panel1;
    JPanel panel2;
    public MyJPanelTest(){
        frame=new JFrame("测试JPanel组件");
        panel1=new JPanel();
        panel1.setBorder(new TitledBorder("panel1"));
        panel1.add(new JButton("panel1"));
        panel2=new JPanel();
        panel2.add(new JButton("panel2"));
        panel2.setBorder(new TitledBorder("panel2"));
        Container cp=frame.getContentPane();
        cp.setLayout(new FlowLayout());
        cp.add(panel1,BorderLayout.WEST);
        cp.add(panel2,BorderLayout.CENTER);
        frame.setSize(300,200);
        frame.show();
    }
    public static void main(String[] args){
        new MyJPanelTest();
    }
}
run:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code
at MyJPanelTest.<init>(MyJPanelTest.java:10)
at MyJPanelTest.main(MyJPanelTest.java:23)
Java Result: 1 后来加上import javax.swing.border.*;就编译通过了
我就是不明白了,我前面的import javax.swing.*;不是已经包含了javax.swing.border.*;了吗?为什么还要再写一个详细的才可以不出错呢,两句之间有什么差别呢?

解决方案 »

  1.   

    import只引进当前包中的类 不包括子包的类
      

  2.   

    楼上正解,import javax.swing.*;这样的写法只是导入java.swing包下的所有类,其子包及其子..包下的类确不能导入因此需要javax.swing.border.*;这样写
      

  3.   


    学习了 平时从不用import package.* 原来还有这么一说
      

  4.   

    引用 1 楼 knightzhuwei 的回复:import只引进当前包中的类 不包括子包的类 YES!!
      

  5.   

    具体的问题楼上的都说明了
    lz还可以这样写:
    例如这两句
    cp.add(panel1,BorderLayout.WEST); 
    cp.add(panel2,BorderLayout.CENTER);
    可以写出
    cp.add(panel1,javax.swing.border.BorderLayout.WEST); 
    cp.add(panel2,javax.swing.border.BorderLayout.CENTER);  
      

  6.   

    最好是import到具体的类, 因为这样会节省JDK的执行时间, 
     如果import到包下的所有的类的话, JVM会加载所有的类
     所以这样消耗内存的