Java 为什么这个图形组件不工作?

Java 为什么这个图形组件不工作?,java,paintcomponent,Java,Paintcomponent,我试图在“Graphics”类中绘制一个矩形,但由于某些原因,该矩形没有出现,但程序没有返回任何错误。我以前从未遇到过这样的问题,所以我很困惑 Main() 图形() 气垫船编辑 import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class Main { public Main() { JFrame window =

我试图在“Graphics”类中绘制一个矩形,但由于某些原因,该矩形没有出现,但程序没有返回任何错误。我以前从未遇到过这样的问题,所以我很困惑

Main()

图形()

气垫船编辑

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


public class Main
{

    public Main()
    {
        JFrame window = new JFrame();

        Sound soundCall = new Sound();
        Draw drawCall = new Draw();

        final JPanel container = new JPanel();

        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.getContentPane().add(drawCall);
        window.setSize(600, 400);
        window.setLocationRelativeTo(null);
        window.setVisible(true);
        window.setResizable(false);

    }

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

    }

}
通过添加这个
window.getContentPane().add(drawCall)
要求我将
drawCall
更改为组件

编辑2:

public class Draw 
{

    public class Graphics extends JPanel
    {

        public void paintComponent(java.awt.Graphics g)
        { 
            super.paintComponent(g);
            g.setColor(Color.GRAY);
            g.drawRect(0, 0, 500, 500);
        }

    }


}
错误
类型容器中的add(Component)方法不适用于参数(Draw)

如果将graphicsCall变量添加为nothing,则不会显示该变量。解决方案:将它添加到一个容器中,比如刚刚创建的JPanel,或者直接添加到JFrame的contentPane中

i、 例如,改变这一点:

    JFrame window = new JFrame();

    Sound soundCall = new Sound();
    Graphics graphicsCall = new Graphics();

    final JPanel container = new JPanel();

    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.getContentPane().add(container);
为此:

    JFrame window = new JFrame();

    Sound soundCall = new Sound();
    Graphics graphicsCall = new Graphics();

    // final JPanel container = new JPanel();

    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.getContentPane().add(soundCall);
另一方面,您需要将该类从图形重新命名为其他名称,否则您可能会混淆自己或编译器,因为已经存在一个具有该名称的关键Java类

另外,避免使用
setSize(…)
。最好让您的图形JPanel覆盖
getPreferredSize()
,并在JFrame上调用
pack()


编辑
根据MadProgrammer敏锐的观察,您的绘图超出了组件的边界


编辑2
关于您的最新代码,请注意:

public class Draw 
{
    public class Graphics extends JPanel
    {
        public void paintComponent(java.awt.Graphics g)
        { 
            super.paintComponent(g);
            g.setColor(Color.GRAY);
            g.drawRect(0, 0, 500, 500);
        }
    }
}
他是无用的德瑞克。为什么不必要地将类包装在类中?相反,为什么不简单地:

public class Draw extends JPanel   {

    public void paintComponent(java.awt.Graphics g)
    { 
        super.paintComponent(g);
        g.setColor(Color.GRAY);
        g.drawRect(0, 0, 500, 500);
    }

    @Override
    public Dimension getPreferredSize() {
       // return an appropriate Dimension here
    }
}

@HarryKitchener:如果你尝试了某件事情,但它不起作用,你会想把这个尝试显示为对你的问题的编辑,并用你的新代码描述你的问题。另请参见编辑以回答。OP正在绘制超出组件可见边界的矩形<代码>g.drawRect(500500500500)。建议类似于
g.drawRect(0,0500500)作为主要测试,我还建议
g.setColor(Color.RED)超过
g.setColor(颜色.灰色)下得到一个错误。添加

public class Draw 
{
    public class Graphics extends JPanel
    {
        public void paintComponent(java.awt.Graphics g)
        { 
            super.paintComponent(g);
            g.setColor(Color.GRAY);
            g.drawRect(0, 0, 500, 500);
        }
    }
}
public class Draw extends JPanel   {

    public void paintComponent(java.awt.Graphics g)
    { 
        super.paintComponent(g);
        g.setColor(Color.GRAY);
        g.drawRect(0, 0, 500, 500);
    }

    @Override
    public Dimension getPreferredSize() {
       // return an appropriate Dimension here
    }
}