我们可以在不扩展JPanel类的情况下使用Paint Component吗?

时间:2015-08-28 09:36:45

标签: java swing jpanel

我正在制作一个gui,其中使用paint组件方法绘制一条线,我知道我可以使用扩展JPanel来做到这一点。但我真的想知道如何做到这一点而不扩展任何东西。喜欢这个程序

public class Main {

    static JPanel panel;

    public static void main(String[] args) {
        JFrame frame = new JFrame("Our Frame");
        panel = new JPanel();
        frame.setSize(600,480);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.add(panel);
    }
}

在这条路上

public class Main {

    public static void main(String[] args) {
        Frame obj = new Frame();
    }
        }

框架

 public class Frame extends JFrame{

    private JPanel panel;

    public Frame(){
        panel = new JPanel();
        setSize(600,480);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
        add(panel);
    }
}

2 个答案:

答案 0 :(得分:0)

您可以这样做:

JPanel panel = new JPanel(true) {
            @Override
            public void paintComponent(Graphics g) {
                super.paintComponent(g);
                // do painting
            }
}

答案 1 :(得分:-1)

嗯,技术上你可以使用component.getGraphics();获取给定组件的图形上下文,然后绘制它。 ,因为该组件也会自行重绘,一旦重绘发生,您的绘图将消失。所以,不要考虑这样做,你只会浪费你的时间!

但是,如果您有一个在BufferedImage中呈现paintComponent()的组件,则可以在图像上绘制(使用img.getGraphics();等),然后组件将反映这些图形。这将允许您拥有一个简单的MyPanel类,其中paintComponent()只会绘制图像。然后,您可以获得对图像的引用,并从您想要的图像中进行绘制。

您已经在代码中扩展了某些内容,在您的情况下,它完全没有必要。您可以删除Frame课程,并使用以下代码显示JFrame

JFrame f = new JFrame();
f.setSize(600, 480);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocationRelativeTo(null);
f.add(panel);
f.setVisible(true);