先别说话,请看代码:
package TestLogin_claP;import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;public class Login_Cla {
private int x ;
private int y ;
private int width ;
private int height ;
JFrame jfLogin = null ;
JPanel jpOneLayer = null ;
JPanel jpTwoLayer = null ;
JPanel jpTwo_OneLayer = null ;
JPanel jpTwo_TwoLayer = null ;

Login_Cla(){
initCoordinateDate();
setupJFrame() ;
setupJpOneLayer() ;
setupJpTwoLayer() ;
initJpTwo_OneLayer();
initJpTwo_TwoLayer();
}
private void initCoordinateDate(){
this.x = 0 ;
this.y = 0 ;
this.width = 500 ;
this.height = 500 ;
}

//----------- setup Component ------

private void setupJFrame(){
jfLogin = new JFrame("Welcome") ;
jfLogin.setVisible(true) ;
jfLogin.setSize(width, height) ;
jfLogin.setLayout(new GridLayout(2,1)) ;
jfLogin.setResizable(false) ;
jfLogin.setLocationRelativeTo(null) ;
WindowClose_Cla winclose_obj = new WindowClose_Cla() ; 
jfLogin.addWindowListener(winclose_obj) ;
// jfLogin.setUndecorated(true) ;//这一步用出问题来了,报了个异常,搞不懂啊!
}

private void setupJpOneLayer(){//it`s the first JPanel
jpOneLayer = new JPanel() ;
jfLogin.add(jpOneLayer) ;
}

private void setupJpTwoLayer(){//it`s the second JPanel
jpTwoLayer = new JPanel() ;
jfLogin.add(jpTwoLayer) ;

jpTwoLayer.setLayout(new GridLayout(1,2)) ;
}

//----------- init JPanel ------

private void initJpTwo_OneLayer(){
jpTwo_OneLayer = new JPanel() ;
jpTwoLayer.add(jpTwo_OneLayer) ;

jpTwo_OneLayer.setBackground(Color.blue) ;
}
private void initJpTwo_TwoLayer(){
jpTwo_TwoLayer = new JPanel() ;
jpTwoLayer.add(jpTwo_TwoLayer) ;

jpTwo_TwoLayer.setBackground(Color.red) ;
}
//--------- complete JPanel -------

public void completeJpOneLayer(){
//不显示!
JLabel jlWelcomeToFont = new JLabel("你好啊!") ;
jpOneLayer.add(jlWelcomeToFont) ;

//jlWelcomeToFont.setText("你好!") ;
jlWelcomeToFont.setVisible(true) ;
Font font=new Font("华文云彩",Font.PLAIN,50) ;
jlWelcomeToFont.setFont(font) ;
}
private void completeJpTwo_OneLayer(){ }
private void completeJpTwo_TwoLayer(){ }
}
/*
 * 此处的类,特点:都是公有的,可以大家都用的类
 */
class WindowClose_Cla extends WindowAdapter{
public void windowClosing(WindowEvent e){
e.getWindow().dispose() ;
//System.exit(0) ;//这个方法和上一个方法用起来效果一样
}
}-----------------------  问 题  ----------------------
问题:
1、为什么我的代码不显示“你好”这几个字?我已经用了jpOneLayer.add(jlWelcomeToFont)啊?
   同时以防万一,我加了jlWelcomeToFont.setVisible(true);怎么就显示不出这几个字?
2、我在setupJFrame()函数里面写了句jfLogin.setUndecorated(true);目的是想隐藏我窗口的标题栏【也就是有叉叉、最小化等这样按钮的一栏】,但是不但没实现目的,还出现了异常?还使得窗口别的东西消失了,求教,为什么?初学者求教!

解决方案 »

  1.   


    我的main方法在另外的一个类里面!
    是这样的
    public void main(String[]args){
       new Login_Cla();
    }
      

  2.   

    在代码里完全看不到方法completeJpOneLayer被调用,当然不会有显示
      

  3.   

    晕死,你忘记调用completeJpOneLayer()方法了
    这个方法最后加上这个方法
     private    void    setupJpTwoLayer(){//it`s the second JPanel
            jpTwoLayer = new JPanel()    ;
            jfLogin.add(jpTwoLayer)        ;
           
             
            jpTwoLayer.setLayout(new GridLayout(1,2))    ;
            completeJpOneLayer();
        }
    还有我觉得你的命名有问题,虽然我一时没找到官方的命名规则,但是你的类,第一个字母一定是要大写的,这个你看看http://www.ibm.com/developerworks/library/ws-tip-namingconv.html
    这里有个官方的conventionhttp://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html
      

  4.   


    明白了!!!另外,我还想请教下,如下代码: JLabel jl_top = new JLabel(){
    @Override
    public void setText(String text) {
    // TODO Auto-generated method stub
    text = "top" ;
    super.setText(text);
    }
                    }
    这里的super是JLabel还是JLabel的父类?
      

  5.   

    Quote: 引用 5 楼 Cecil_911 的回复:

    还有我觉得你的命名有问题,虽然我一时没找到官方的命名规则,但是你的类,第一个字母一定是要大写的,这个你看看http://www.ibm.com/developerworks/library/ws-tip-namingconv.html
    这里有个官方的conventionhttp://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html quote]我的类的确是大写字母开头啊!只不过方法我小写开头 ... 
    thank you顺便我想问个问题,请看:
    在JPanel里面,JPanel布局是BorderLayout,然后定义了5个JLabel,分别是jl_top\jl_right\jl_buttom\jl_left\jl_center,然后只是jl_center.setText("你好");然后按顺序放入jpanel.add(String name,Component comp);里
    问题,为什么【你好】两个字不在中间,而是靠左边呢?代码大概如下:
    private void completeJpOneLayer(){
    JLabel jl_top = new JLabel() ;
    jpOneLayer.add(jl_top, BorderLayout.NORTH) ;
    jl_top.setPreferredSize(new Dimension(width, height/12)) ; JLabel jl_left = new JLabel() ;
    jpOneLayer.add(jl_left, BorderLayout.WEST) ;

    JLabel jl_right = new JLabel() ;
    jpOneLayer.add(jl_right, BorderLayout.EAST) ; JLabel jl_bottom = new JLabel();
    jpOneLayer.add(jl_bottom, BorderLayout.SOUTH) ; JLabel jl_center = new JLabel() ;
    jpOneLayer.add(jl_center, BorderLayout.CENTER) ;
    jl_center.setText("欢迎进入在线销售系统") ;
    Font font = new Font("华文彩云",Font.PLAIN,45) ;
    jl_center.setFont(font) ; }
      

  6.   

    JLable label=new JLabel(){
    @override
    public void setText(String text){}}意思就是一个new 了一个继承自JLabel的类对象,此类重写了JLabel的setText()方法
      

  7.   


    thanks ;
    我可不可以这样理解:
    1、JLabel jl = new JLabel(){......super.setText("你好")};这里的super指针指向的是JLabel?
    2、JLabel jl = new JLabel();这里是实例化jl,我可不可以理解为:new JLabel() ---> 创建一个新的JLabel空间,【这个新的JLabel空间是继承JLabel的】,然后jl保存这个空间的地址?【注:初学java,我还是有点C的思想束缚,见谅!】
      

  8.   


    嗯,可以这样理解,后面new 出来的是JLabel子类对象,JLabel label引用此对象。
      

  9.   


    这下懂了这个问题!我刚才问的那个问题,也劳烦兄弟看下:
    假设:
    width = 500 ;
    height = 350 ;那么,代码:
    public    void    completeJpOneLayer(){
    JLabel jl_top = new JLabel();
    jpOneLayer.add(jl_top, BorderLayout.NORTH);
    jl_top.setPreferredSize(new Dimension(width, height/12)); JLabel jl_left = new JLabel();
    jpOneLayer.add(jl_left, BorderLayout.WEST); JLabel jl_right = new JLabel();
    jpOneLayer.add(jl_right, BorderLayout.EAST); JLabel jl_bottom = new JLabel();
    jpOneLayer.add(jl_bottom, BorderLayout.SOUTH); JLabel jl_center = new JLabel();
    jpOneLayer.add(jl_center, BorderLayout.CENTER);
    jl_center.setText("欢迎你,兄弟!");
    Font font = new Font("华文彩云",Font.PLAIN,45); 
    jl_center.setFont(font);
     }那么【欢迎你兄弟!】这段文字为什么靠左边而不靠中间!
      

  10.   


    在swing里面排版很麻烦,具体的我试试,有结果发上来,嘿嘿,实力不够就不上来说了
      

  11.   


    你试试,给north,west,east,south每个模块分别放置点内容,试试;或者把每个模块的大小定义为固定值试试;或者定义为GridLayout,建议,不确定哦
      

  12.   


    好吧,关键就是那个JLabel,我有一段文字,要放在JPanel中间,可是为了布局,我设置的JPanel是BorderLayout,然后JLabel放在BorderLayout.center,哪晓得文字一直靠右,纠结啊!