你如何画上一个JPanel,这是另一种JPanel的内形状?(How do you draw sha

2019-08-18 10:40发布

我目前正试图画出一个形状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);
}

这是当我处理的只是一个面板都不错,但我想一个面板,是我创建第1'面板内陈列的形状。

Answer 1:

这是当我处理的只是一个面板都好,

你的代码贴优秀作品,因为机架采用BorderLayout的。 所以,当您将面板添加到帧的大小会增加,你的风俗画可以看出。

我想一个面板,其是我已经创建了第1'面板内的显示的形状。

当你创建一个面板是默认使用的FlowLayout。 当您添加自定义绘制面板,该面板将在其首选大小来显示,这将是(0,0),因为你没有指定首选尺寸。

在那些风俗画的面板也需要实现的getPreferredSize()方法,以便布局经理知道如何安排的面板。 例如:

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


Answer 2:

添加一个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);
}

这可以组件中的组件工作,如果你将其添加为子组件。 关键是要扩展组件,并覆盖你希望改变的方法。



文章来源: How do you draw shapes on a JPanel, which is within another JPanel?