java - 如何在位于另一个 JPanel 中的 JPanel 上绘制形状?

标签 java swing jpanel java-2d paintcomponent

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

我搜索了 Google 和 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);
}

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

关于java - 如何在位于另一个 JPanel 中的 JPanel 上绘制形状?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15733835/

相关文章:

java - Install4j:在自定义 InstallerScreen 中更改 JPanel 的大小

java - 粒子模拟器Java

java - setLocation 不适用于扩展 JPanel 的类

java - JOptionPane 内的 JPanel 内的 JTable 不会根据需要调整大小

java - 从 WSDL 生成的客户端能否生成排除可选 header 元素的请求?

java - Spring 启动 : SpringBootServletInitializer is deprecated

java - 保留默认 UI,同时更改某些方面

java - 单击 JFrame 内的 JPanel

java - 使用 java 配置进行 n 因素身份验证

java - java中的HTTP POST请求