不知道为什么我添加了个自定义的JComponent和自定义JLabel到JFrame中都可以显示    但我又加了个自定义JComponent就不能显示了  老是只显示刚才前边加的两个莫名奇妙  而我如果把第三个加的那个自定义子类改成继承JLabel(同时在其构造器中调用JLabel的构造器)就可以了  郁闷 下边是代码  希望比较了解的哥们来解答下   我在写一个2d游戏心急啊private ScreenFrame() {
setSize(frameW, frameH);
setTitle("Designer");
// Create Helper
talker = new Talker();
tools = new Tools();
canvas = new GameCanvas(this, tools, talker);
// Get panel
Container pane = getContentPane();
// Add Helper
pane.add(talker, BorderLayout.SOUTH);
pane.add(tools, BorderLayout.WEST);
pane.add(canvas, BorderLayout.CENTER);
// Say "Hello!"
talker.sayWrong("Welcome to my world!");
}不知道为什么老是不显示那个tools(就是我说的第三个加进来,且不显示的类)

解决方案 »

  1.   

    把出问题的那个Component代码贴出来看看。
      

  2.   

    Tools 如果没有使用布局管理器,计算不出他的preferredSize。需要手动设置。否则被当作 0*0,不能正常显示
      

  3.   

    用java写布局啊,N多年没用过了
      

  4.   


    import java.io.File;
    import java.io.IOException;
    import java.awt.*;
    import javax.imageio.ImageIO;
    import javax.swing.*;public class Tools extends JComponent{
    //
    //Fields
    //
    private Chooser chooser; //
    //Constructor
    //
    Tools() {
    super();
    chooser = new Chooser();

    }
    //
    // Method
    //
    public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawString("sb", 10, 10);
    System.out.println("pp");
    }
    public Chooser getChooser() {
    return chooser;
    }
    }
    这个就是tools不知道为什么不显示
      

  5.   

    你可以输出一下tools的大小。创建实例后调用 setPreferredSize(new Dimension(100,600)) 设置一下大小,具体多大你自己看
      

  6.   

    请问这位哥们要如何手动设置呢?   我刚才试了试 貌似是因为我把那个Canvas放在了CENTER而BorderLayout的CENTER区貌似会自己充满JFrame   但是我的JFrame里边还加了个Talker对象  这个Talker是继承自JLabel,我也没有在其中设置大小  可是为什么他就会显示  而前边的tools却不显示呢  ?import java.awt.Color;import javax.swing.BorderFactory;
    import javax.swing.JLabel;public class Talker extends JLabel{ //
    // Constructor
    //
    Talker() {
    } //
    // Method
    //
    public void sayWrong(String what) {
    this.setBorder(BorderFactory.createLineBorder(Color.RED));
    this.setText("#Wrong!#: " + what);
    this.setForeground(Color.RED);
    }
    }我不是很懂手动设置 我在 tools的构造器里加了setSize方法  结果还是不显示   
      

  7.   

    请问为什么setSize不行呢?  我刚覆盖了JComponent的getPreferredSize方法  可以正常显示了  
    可是为什么我的Talker类也没有设置这个却可以正常显示啊
      

  8.   

    布局管理器使用 preferredSize。Tools tools = new Tools();
    tools.setPreferredSize(new Dimension(width,height));  // 换成你想要的大小
      

  9.   

    JLabel 的大小由对应的 LabelUI 确定了。
      

  10.   

    麻烦 问一下 JComponent就没有那个UI了吗?只有JLabel有?
      

  11.   

    是不是现在界面什么的都不用java写了啊
      

  12.   

    这些在 javax.swing.plaf 包里面
    ComponentUI是一个抽象类,getPreferredSize返回null,由子类实现.
    具体的计算大小一般由各个 look & feel实现。