2016-04-12 33 views
0

Tamam, sormadan önce evet, herhangi bir Layout Manager kullanmıyorum. Hayır, bu kötü bir tasarım yapmaz (burada insanların gördüğünü gördüğüm gibi, çünkü kimse bir tane kullanmadı). Şey, etiketin her zaman (ve her zaman) iki düğmeyi (JButton'da bir Simge veya bir metin olarak yerleştirmeyi imkansız kılan boşlukların üzerinde gösterilmesini) göstermesini istiyorum. Beni altındaki düğmeye YARDIM ... üst üste etiketi altında kalır değil ki bu sonraİki JButton üzerinde bir JLabel koyun

JFrame frame = new JFrame("ColorTap"); 
private void init() { 

    JButton jb1 = new JButton(""), jb2 = new JButton("-"); 
    JLabel label = new JLabel("TEXT HERE"); 
    label.setForeground(Color.white); 
    label.setFont(new Font("Arial Bold",Font.ITALIC,30)); 
    label.setBounds(60,249,200,100); 
    frame.setLayout(null); 
    jb1.setBounds(0, 0, 300,298); 
    jb2.setBounds(0, 302, 300, 300); 
    jb1.setBackground(Color.black); 
    jb2.setBackground(Color.black); 
    jb1.setBorderPainted(false); 
    jb2.setBorderPainted(false); 
    frame.add(label); 
    frame.add(jb1); 
    frame.add(jb2); 
    frame.setResizable(false); 
    frame.setSize(300, 628); 
    frame.setLocation(550, 50); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
} 

Ne yabancıydı! Teşekkürler

+1

'JLayeredPane''e bakın: https://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html – Berger

+2

Bir mizanpaj yöneticisi kullanmamanız," kötü "tasarım olmayabilir, ama kesinlikle mazoşistik;) – dustinroepsch

+4

"* Hayır, bu kötü tasarımı yapmaz *" Bu oldukça bir ifade. Bu * özellikle * bir düzen yöneticisi aracılığıyla ele alınacak bir şey gibi görünüyor. 2 bileşenin üzerinde bir bileşen yerleştirmek istersiniz. Bu ilişkiyi bir arada idare etmeli ve bir şey bir düzen yöneticisi olacaktı. Bu gerekli değil, ama şu anda yapmakta olduğunuzdan kesinlikle daha tutarlı ve modüler bir tasarım olacaktır. –

cevap

0

Salıncak bileşenleri iki boyutta boyamak için optimize edilmiştir. Bu, bileşenlerin asla üst üste gelmeyeceğini varsayar. Üst üste binen JButtonlar, düğmelerin sadece etiketlere değil, düğmelerin boyanmasına yol açan rollover efektleri nedeniyle bir soruna neden olur, bu yüzden düğme etiketin üst kısmına boyanır.

Şimdi
JPanel panel = new JPanel() 
{ 
    @Override 
    public boolean isOptimizedDrawingEnabled() 
    { 
     return false; 
    } 
}; 

Panelin bir düzen yöneticisi ayarlamak ve sizin bileşenleri ekleyebilirsiniz:

Yani bileşenler emin bileşenleri düzgün ZOrder boyanmış yapabilirsiniz Salıncak böylece üst üste emin Salınımı anlatmaya gerek panel ve düzgün şekilde boyanacaktır.

DOES'in düzen yöneticilerini kullanmasıyla ilgili bir örnek için bkz: How to put a JButton with an image on top of another JButton with an image?.