Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义UI绘制问题_Java_Swing_Paint - Fatal编程技术网

Java 自定义UI绘制问题

Java 自定义UI绘制问题,java,swing,paint,Java,Swing,Paint,我有一个JInternalFrame,我正在对其应用自定义UI。UI绘制组件,但当我将JPanel添加到JInternalFrame时,它不会显示。我认为UI会影响整个组件,但是如何绘制UI然后绘制组件呢 但是如果有人有更好的方法,请告诉我!谢谢 public class ClassInternalFrame extends JInternalFrame { public static Color currentColor; public static final Color C

我有一个JInternalFrame,我正在对其应用自定义UI。UI绘制组件,但当我将JPanel添加到JInternalFrame时,它不会显示。我认为UI会影响整个组件,但是如何绘制UI然后绘制组件呢

但是如果有人有更好的方法,请告诉我!谢谢

public class ClassInternalFrame extends JInternalFrame {
    public static Color currentColor;
    public static final Color CLASS_TYPE = new Color(148, 227, 251);

    public ClassInternalFrame(String title, Color classType) {
        super(title, true, true, false, true);
        currentColor = classType;
        super.setUI(new ClassFrameUI());

        Container pane = super.getContentPane();
        pane.setLayout(new BorderLayout());

        JPanel titlePanel = new JPanel();
        titlePanel.setPreferredSize(new Dimension(0, 20));
        pane.add(titlePanel, BorderLayout.NORTH);

        titlePanel.setBorder(new MatteBorder(1, 1, 1, 1, Color.yellow));
    }

}

class ClassFrameUI extends InternalFrameUI {
    private final static ClassFrameUI frmUI = new ClassFrameUI();

    public static ComponentUI createUI(JComponent c) {
        return frmUI;
    }

    @Override
    public void paint(Graphics g, JComponent c)
    {
        Graphics2D g2d = (Graphics2D) g;

        g2d.setColor(Color.LIGHT_GRAY);
        g2d.fillRect(0, 0, c.getWidth(), c.getHeight());

        g2d.setColor(ClassInternalFrame.currentColor);
        g2d.fillRect(0, 0, c.getWidth(), 20);

        g2d.setColor(Color.DARK_GRAY);
        g2d.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[] { 1, 0 }, 0));
        g2d.drawRect(0, 0, c.getWidth()-1, c.getHeight()-1);
        g2d.drawLine(0, 20, c.getWidth(), 20);


    }
}

问题不在于您正在绘制任何内容,而是
InternalFrameUI
完全不做任何事情(如果它做了,您还需要调用
super.paint(g,c);
)。通常,组件的绘制由子类完成,例如
BasicInternalFrameUI
。看起来您正试图绘制一个自定义标题栏,这是一个
BasicInternalFrameUI
委托给
BasicInternalFrameTitleBar
的任务