Java 在JFrame中创建JPanel,并使用paintComponent()方法绘制面板

Java 在JFrame中创建JPanel,并使用paintComponent()方法绘制面板,java,swing,jpanel,java-2d,Java,Swing,Jpanel,Java 2d,这是我第一次使用java Swing,我不知道如何在JSplitPane中的特定JPanel中绘制,我尝试创建一个新类来实现paintComponent方法,但它不能被重写。 有人能帮我吗 import javax.swing.*; import java.awt.*; public class SplitPane extends JPanel{ private JPanel mainPanel; private JPanel leftPanel; private J

这是我第一次使用java Swing,我不知道如何在
JSplitPane
中的特定
JPanel
中绘制,我尝试创建一个新类来实现
paintComponent
方法,但它不能被重写。 有人能帮我吗

import javax.swing.*;
import java.awt.*;

public class SplitPane extends JPanel{

    private JPanel mainPanel;
    private JPanel leftPanel;
    private JPanel rightPanel;


    public SplitPane() {

    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new SplitPane().createAndShowUI();
            }
        });
    }

    private void createAndShowUI() {
        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        initComponents(frame.getContentPane());
        frame.setVisible(true);
    }

    private void initComponents(Container contentPane) {
        mainPanel = new JPanel();
        leftPanel = new JPanel();
        rightPanel = new JPanel();
        leftPanel.add(new JLabel("left"));
        rightPanel.add(new JLabel("right"));
        leftPanel.setPreferredSize(new Dimension(200, 40));
        rightPanel.setPreferredSize(new Dimension(280, 400));
        leftPanel.setBackground(Color.WHITE);
        rightPanel.setBackground(Color.WHITE);

        JSplitPane mainJsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
        mainJsp.add(leftPanel, JSplitPane.TOP);
        mainJsp.add(rightPanel, JSplitPane.BOTTOM);
        mainJsp.setOneTouchExpandable(true);
        mainJsp.setDividerLocation(150);
        mainPanel.add(mainJsp);
        contentPane.add(mainPanel);

        leftPanel = new PaintPanel();


    }

    public class PaintPanel extends JPanel {
        public PaintPanel() {
            System.out.println("PaintPanel");
            this.setLayout(new BorderLayout());
            this.setPreferredSize(new Dimension(300, 300));
        }

        @Override
        public void paintComponent(Graphics g) {

            System.out.println("12345678");
            super.paintComponent(g);
            //g.setColor(Color.black);
            g.drawRect(3, 3, 20, 20);
        }
    }
}

您从不向任何内容添加
PaintPanel
,例如

private void initComponents(Container contentPane) {
    mainPanel = new JPanel();
    leftPanel = new JPanel();
    rightPanel = new JPanel();
    leftPanel.add(new JLabel("left"));
    rightPanel.add(new JLabel("right"));
    leftPanel.setPreferredSize(new Dimension(200, 40));
    rightPanel.setPreferredSize(new Dimension(280, 400));
    leftPanel.setBackground(Color.WHITE);
    rightPanel.setBackground(Color.WHITE);

    JSplitPane mainJsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
    mainJsp.add(leftPanel, JSplitPane.TOP);
    mainJsp.add(rightPanel, JSplitPane.BOTTOM);
    mainJsp.setOneTouchExpandable(true);
    mainJsp.setDividerLocation(150);
    mainPanel.add(mainJsp);
    contentPane.add(mainPanel);

    leftPanel = new PaintPanel();
    // Just left hanging here, never added to anything...?

}
所以,如果我把它改成

private void initComponents(Container contentPane) {
    mainPanel = new JPanel();
    leftPanel = new PaintPanel();
    rightPanel = new JPanel();
    leftPanel.add(new JLabel("left"));
    rightPanel.add(new JLabel("right"));
    leftPanel.setPreferredSize(new Dimension(200, 40));
    rightPanel.setPreferredSize(new Dimension(280, 400));
    leftPanel.setBackground(Color.WHITE);
    rightPanel.setBackground(Color.WHITE);

    JSplitPane mainJsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
    mainJsp.add(leftPanel, JSplitPane.TOP);
    mainJsp.add(rightPanel, JSplitPane.BOTTOM);
    mainJsp.setOneTouchExpandable(true);
    mainJsp.setDividerLocation(150);
    mainPanel.add(mainJsp);
    contentPane.add(mainPanel);

    //leftPanel = new PaintPanel();

}
它现在显示


public void paintComponent(Graphics g){
应该是
public void paintComponent(Graphics g){
应该是
public void paintComponent(Graphics g){super.paintComponent(g);..
另请参见(是)谢谢!它仍然不起作用,我在paintComponent函数中使用system.out.print,但控制台中没有打印输出,因此我认为此函数不会被重写。您从未将面板添加到任何容器中。没有添加(middleRightPanel)之类的行要更快地获得更好的帮助,请发布or。请注意,MCVE应该包括
import
语句和
main(String[])
来运行它。