Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在另一个JPanel中的JPanel上绘制形状?_Java_Swing_Jpanel_Java 2d_Paintcomponent - Fatal编程技术网

Java 如何在另一个JPanel中的JPanel上绘制形状?

Java 如何在另一个JPanel中的JPanel上绘制形状?,java,swing,jpanel,java-2d,paintcomponent,Java,Swing,Jpanel,Java 2d,Paintcomponent,我目前正在尝试在一个JPanel上绘制形状,它在另一个JPanel中,在JFrame中 我搜索了谷歌和Youtube,找到了如何在一个只有一个面板的JFrame中绘制形状,但没有找到任何东西可以帮助我做什么。也许我没看到什么 到目前为止我看到的代码: public class GameScreen { public void paintComponent(Graphics g) { super.paintComponent(g); g.setCo

我目前正在尝试在一个JPanel上绘制形状,它在另一个JPanel中,在JFrame中

我搜索了谷歌和Youtube,找到了如何在一个只有一个面板的JFrame中绘制形状,但没有找到任何东西可以帮助我做什么。也许我没看到什么

到目前为止我看到的代码:

public class GameScreen 
{
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.setColor(Color.red);
        g.drawRect(100, 10, 30, 40);
    }

    public static void main(String[] args)
    {
       GameScreen gs = new GameScreen();
       JFrame f = new JFrame();
       f.setTitle("");
       f.setSize(400,400);
       f.setVisible(true);
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       f.add(gs);
}

当我只处理一个面板时,这一切都很好,但我想在我创建的第一个面板中的面板上显示形状。

以与现在相同的方式将JPanel添加到JFrame中,但使用您自己的JPanel子类来执行

class MyPanel extends JPanel {
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.red);
        g.drawRect(100, 10, 30, 40);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(400,400); // As suggested by camickr
    }
}
您可以将其添加到JFrame中的JPanel中

public static void main(String[] args)
{
   MyPanel mp = new MyPanel();
   JPanel jp = new JPanel();
   jp.add(mp);

   JFrame f = new JFrame();
   f.setTitle("");
   f.setSize(400,400);
   f.setVisible(true);
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   f.add(jp);
}

如果将组件作为子组件添加,则这适用于组件中的组件。关键是扩展组件并覆盖您希望更改的方法。

以与现在相同的方式将JPanel添加到JFrame中,但使用您自己的JPanel子类来完成

class MyPanel extends JPanel {
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.red);
        g.drawRect(100, 10, 30, 40);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(400,400); // As suggested by camickr
    }
}
您可以将其添加到JFrame中的JPanel中

public static void main(String[] args)
{
   MyPanel mp = new MyPanel();
   JPanel jp = new JPanel();
   jp.add(mp);

   JFrame f = new JFrame();
   f.setTitle("");
   f.setSize(400,400);
   f.setVisible(true);
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   f.add(jp);
}
如果将组件作为子组件添加,则这适用于组件中的组件。关键是扩展组件并覆盖要更改的方法

当我只处理一个面板时,这一切都很好

您发布的代码工作正常,因为框架使用了边框布局。因此,当您将面板添加到框架时,它的大小将增加,并且您的自定义绘画将被看到

我想在我创建的第一个面板中的面板上显示形状

创建面板时,默认情况下使用FlowLayout。将自定义绘制面板添加到该面板时,它将以其首选大小显示,该大小将为0,0,因为您没有指定首选大小

在进行自定义绘制的面板上,还需要实现getPreferredSize方法,以便布局管理器知道如何排列面板。例如:

public Dimension getPreferredSize()
{
    return new Dimension(200, 200);
}
当我只处理一个面板时,这一切都很好

您发布的代码工作正常,因为框架使用了边框布局。因此,当您将面板添加到框架时,它的大小将增加,并且您的自定义绘画将被看到

我想在我创建的第一个面板中的面板上显示形状

创建面板时,默认情况下使用FlowLayout。将自定义绘制面板添加到该面板时,它将以其首选大小显示,该大小将为0,0,因为您没有指定首选大小

在进行自定义绘制的面板上,还需要实现getPreferredSize方法,以便布局管理器知道如何排列面板。例如:

public Dimension getPreferredSize()
{
    return new Dimension(200, 200);
}

无法获取您的问题..如果您想在一个面板中绘制许多形状,请通过继承JPanel创建自己的面板,并重写其paintComponent方法,并在该面板中绘制尽可能多的形状..无法获取您的问题..如果您想在一个面板中绘制许多形状,请通过继承JPanel和创建自己的面板覆盖其paintComponent方法,并在该面板中绘制尽可能多的形状。。