Java绘图程序

Java绘图程序,java,swing,graphics2d,Java,Swing,Graphics2d,我试图创建一个简单的绘图程序,其中包含一个工具栏和绘图区域。程序的主窗口是JFrame。我添加了一个JToolBar和一个JPanel drawingPanel来进行绘制。但是,这条线不是在drawingPanel上画的,而是在它后面,当我删除drawingPanel时,我可以看到这条线-只需注释掉CreateDrawingPanel;。如何在drawingPanel上画线 import java.awt.BorderLayout; import java.awt.Color; import j

我试图创建一个简单的绘图程序,其中包含一个工具栏和绘图区域。程序的主窗口是JFrame。我添加了一个JToolBar和一个JPanel drawingPanel来进行绘制。但是,这条线不是在drawingPanel上画的,而是在它后面,当我删除drawingPanel时,我可以看到这条线-只需注释掉CreateDrawingPanel;。如何在drawingPanel上画线

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;

public class UserInterface extends JPanel 
{
    static JFrame frame;
    static JPanel drawingPanel;

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

    private static void CreateFrame()
    {
        frame = new JFrame("Interface");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500,500);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.setExtendedState(Frame.MAXIMIZED_BOTH);
        frame.add(new UserInterface());
    }

    public UserInterface()
    {
        setLayout(new BorderLayout());
        CreateToolBar();
        CreateDrawingPanel();
        repaint();
    }

    private void CreateToolBar()
    {
        JToolBar toolbar = new JToolBar(JToolBar.VERTICAL);
        JButton button = new JButton("Some button");
        toolbar.add(button);
        add(toolbar, BorderLayout.WEST);
        toolbar.setBackground(Color.black);
        toolbar.setFloatable(false);
    }

    private void CreateDrawingPanel()
    {
        drawingPanel = new JPanel();
        add(drawingPanel, BorderLayout.CENTER);
        drawingPanel.setBackground(Color.white);
    }

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.drawLine(100, 100, 120, 500);
    }

}

所有图形都位于UserInterface对象上,因为这是覆盖paintComponent的位置

删除paintComponent替代,并更改createDrawingPanel:


所有图形都位于UserInterface对象上,因为这是覆盖paintComponent的位置

删除paintComponent替代,并更改createDrawingPanel:


您可以这样定义drawingPanel:

drawingPanel = new JPanel(){
   protected void paintComponent(Graphics g){
       //Your draw Code
   }
};
drawingPanel = new DrawingPanel();
或者您可以创建一个继承自JPanel的类:

public class DrawingPanel extends JPanel{
    public DrawingPanel(){
        //...
    }

    protected void paintComponent(Graphics g){
       //Your draw Code
    }
}
然后像这样使用它:

drawingPanel = new JPanel(){
   protected void paintComponent(Graphics g){
       //Your draw Code
   }
};
drawingPanel = new DrawingPanel();

您可以这样定义drawingPanel:

drawingPanel = new JPanel(){
   protected void paintComponent(Graphics g){
       //Your draw Code
   }
};
drawingPanel = new DrawingPanel();
或者您可以创建一个继承自JPanel的类:

public class DrawingPanel extends JPanel{
    public DrawingPanel(){
        //...
    }

    protected void paintComponent(Graphics g){
       //Your draw Code
    }
}
然后像这样使用它:

drawingPanel = new JPanel(){
   protected void paintComponent(Graphics g){
       //Your draw Code
   }
};
drawingPanel = new DrawingPanel();

啊,你为什么违反命名规则?!啊,你为什么违反命名规则?!