2010-10-06 2 views
1

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

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

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


    } 
} 

ответ

2

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