Пользовательская проблема рисования пользовательского интерфейса - PullRequest
1 голос
/ 07 октября 2010

У меня есть JInternalFrame, к которому я применяю пользовательский интерфейс.Пользовательский интерфейс закрашивает компонент, но когда я добавляю JPanel в JInternalFrame, он не отображается.Я думаю, что пользовательский интерфейс закрашивает весь компонент, но как мне закрасить пользовательский интерфейс, ЗАТЕМ рисовать компоненты?

Но если у кого-то есть лучший способ сделать это, пожалуйста, сообщите мне!Спасибо!

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);


    }
}

1 Ответ

2 голосов
/ 07 октября 2010

Проблема не в том, что вы рисуете поверх чего-либо, а в том, что InternalFrameUI абсолютно ничего не делает (в противном случае вам также нужно было бы вызвать super.paint(g, c);).Обычно рисование компонентов выполняется подклассом, таким как BasicInternalFrameUI.Похоже, вы пытаетесь нарисовать пользовательскую строку заголовка, задачу, которую BasicInternalFrameUI делегирует BasicInternalFrameTitleBar.

...