2014-11-03 32 views
1
import java.awt.*; 
import javax.swing.*; 
import javax.swing.plaf.LayerUI; 
public class MyJLayer extends JFrame { 
    public static void main(String[] args) { 
     MyJLayer jlayer = new MyJLayer(); 
     jlayer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel panel = new JPanel(); 
     JButton button = new JButton("Debug Only."); 
     panel.add(button); 

     UI ui = new UI(); 
     JLayer<JPanel> jLayer = new JLayer<JPanel>(panel, ui); 

     jlayer.add(jLayer); 
     jlayer.setSize(100, 100); 
     jlayer.setVisible(true); 
    } 
} 
class UI extends LayerUI<JPanel>{ 
    public void paint(Graphics g, JPanel c){ 
     super.paint(g, c); 
     Graphics2D g2d = (Graphics2D)g.create(); 
     g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .8f)); 
     g2d.setColor(Color.BLUE); 
     g2d.fillRect(0, 0, c.getWidth(), c.getHeight()); 
     g2d.dispose(); 
    } 
} 

該面板根本不顯示藍色,但我不知道爲什麼。 任何人都可以幫我嗎? 我只是找不到。 http://docs.oracle.com/javase/tutorial/uiswing/misc/jlayer.html我遵循oracle有關JLayer的教程,但它不適用於此代碼

+0

顯示異常堆棧或者任何異常? – Divya 2014-11-03 17:13:32

+0

你的代碼是否被調用? JPanel c的大小是多少? – keuleJ 2014-11-03 17:14:24

回答

4

您的paint方法不會覆蓋超類方法,所以不會被調用。簽名更改爲:

public void paint(Graphics g, JComponent c) 

...並添加註釋@Override因此,今後,編譯器能找到適合你的問題......

+0

謝謝!我找到了!是的,更改油漆(Graphics g,JPanel c) - > paint(Graphics g,JComponent c),然後完成。 – 2014-11-03 23:49:08

相關問題