Java 将使用JPanel扩展的类添加到现有JPanel

Java 将使用JPanel扩展的类添加到现有JPanel,java,swing,class,object,jpanel,Java,Swing,Class,Object,Jpanel,我创建了一个扩展了JPanel的类。然后,当我创建了它的一个对象并添加到现有的JPanel中时,它没有显示出来。我做错了什么 public class StartTower extends JPanel{ private int value; public StartTower(int value){ this.value = value; } public static StartTower send(int value){ return new StartTower(va

我创建了一个扩展了JPanel的类。然后,当我创建了它的一个对象并添加到现有的JPanel中时,它没有显示出来。我做错了什么

public class StartTower extends JPanel{
private int value;

public StartTower(int value){
    this.value = value;
}

public static StartTower send(int value){
    return new StartTower(value);  
}

@Override
public Dimension getPreferredSize() {
    return new Dimension(752, 359);
}

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);

    g.fillRect(120, 60, 10, 270);
    g.fillRect(20, 330, 210, 10);

    g.fillRect(375, 60, 10, 270);
    g.fillRect(275, 330, 210, 10);

    g.fillRect(630, 60, 10, 270);
    g.fillRect(530, 330, 210, 10);

    int val1 = 20;
    int val2 = 315;
    int val3 = 210;
    int col = 100;
    for (int i = 0; i < value; i++) {
        g.setColor(new Color(100, col, 100));
        g.fillRect(val1, val2, val3, 15);
        System.out.println(val1 + " " + val2 + " " + val3 + " " + col);
        val1 += 10;
        val2 -= 15;
        val3 -= 20;
        col -= 10;
    }
}
方法,在该方法中,我创建了前面提到的类的对象,并将其添加到现有的JPanel中。(mainPanel是使用NetBeans中的拖放创建的现有JPanel)


为什么这个没有出现?代码中有什么错误?提前谢谢

如果要使用空布局(我不推荐),那么在添加组件之前,必须设置其边界,以便空布局知道将其放置在何处


我不确定您的完整代码是什么,但我只是尝试了一下,效果很好:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class StartTower extends JPanel
{
    private int value;

    public StartTower(int value)
    {
        this.value = value;
    }

    public static StartTower send(int value)
    {
        return new StartTower(value);
    }

    @Override
    public Dimension getPreferredSize()
    {
        return new Dimension(752, 359);
    }

    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);

        g.fillRect(120, 60, 10, 270);
        g.fillRect(20, 330, 210, 10);

        g.fillRect(375, 60, 10, 270);
        g.fillRect(275, 330, 210, 10);

        g.fillRect(630, 60, 10, 270);
        g.fillRect(530, 330, 210, 10);

        int val1 = 20;
        int val2 = 315;
        int val3 = 210;
        int col = 100;
        for (int i = 0; i < value; i++)
        {
            g.setColor(new Color(100, col, 100));
            g.fillRect(val1, val2, val3, 15);
            System.out.println(val1 + " " + val2 + " " + val3 + " " + col);
            val1 += 10;
            val2 -= 15;
            val3 -= 20;
            col -= 10;
        }
    }

    private static void createAndShowGUI()
    {
        StartTower startTower = new StartTower(5);

        JFrame jFrame = new JFrame();

        JPanel jPanel = new JPanel();
        jPanel.add(startTower);

        jFrame.getContentPane().add(jPanel);
        jFrame.pack();
        jFrame.setVisible(true);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
    }
}
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.Graphics;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
公共类StartPower扩展JPanel
{
私有int值;
公共启动电源(int值)
{
这个值=值;
}
公共静态启动电源发送(int值)
{
返回新的StartPower(值);
}
@凌驾
公共维度getPreferredSize()
{
返回新尺寸(752359);
}
@凌驾
受保护组件(图形g)
{
超级组件(g);
g、 fillRect(120,60,10270);
g、 fillRect(20、330、210、10);
g、 fillRect(375,60,10270);
g、 fillRect(275330210,10);
g、 fillRect(630、60、10270);
g、 fillRect(530330210,10);
int val1=20;
int val2=315;
int val3=210;
int col=100;
for(int i=0;i
此。添加(启动电源)。请看->()。这将允许您切换面板视图。另请参阅。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class StartTower extends JPanel
{
    private int value;

    public StartTower(int value)
    {
        this.value = value;
    }

    public static StartTower send(int value)
    {
        return new StartTower(value);
    }

    @Override
    public Dimension getPreferredSize()
    {
        return new Dimension(752, 359);
    }

    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);

        g.fillRect(120, 60, 10, 270);
        g.fillRect(20, 330, 210, 10);

        g.fillRect(375, 60, 10, 270);
        g.fillRect(275, 330, 210, 10);

        g.fillRect(630, 60, 10, 270);
        g.fillRect(530, 330, 210, 10);

        int val1 = 20;
        int val2 = 315;
        int val3 = 210;
        int col = 100;
        for (int i = 0; i < value; i++)
        {
            g.setColor(new Color(100, col, 100));
            g.fillRect(val1, val2, val3, 15);
            System.out.println(val1 + " " + val2 + " " + val3 + " " + col);
            val1 += 10;
            val2 -= 15;
            val3 -= 20;
            col -= 10;
        }
    }

    private static void createAndShowGUI()
    {
        StartTower startTower = new StartTower(5);

        JFrame jFrame = new JFrame();

        JPanel jPanel = new JPanel();
        jPanel.add(startTower);

        jFrame.getContentPane().add(jPanel);
        jFrame.pack();
        jFrame.setVisible(true);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
    }
}