2012-03-29 8 views
0

Also habe ich eine GUI, wo das Layout auf Null gesetzt ist, und ich setze JLabels ontop von JButtons, da die JButtons Icons haben und das Hinzufügen von Text zu der Schaltfläche die Schaltfläche verzerrt aussehen lässt, stattdessen verwende ich JLabels auf den JButtons. Jedes Mal, wenn die Maus beim Testen über den JButton geht, verschwindet JLabel. Wie kann ich das beheben, so dass JLabels immer über JButtons erscheinen?Wie kann ich ein JLabel immer über einem JButton halten?

Bearbeiten: Es verzerrt die Schaltfläche, so dass das Symbol den meisten Platz einnimmt und die Schaltflächenbeschriftung durch die gegenüberliegende Schaltfläche abgeschnitten wird.

+0

'verzerrt' definieren? – JTeagle

+0

* "Also habe ich eine GUI, wo das Layout auf Null gesetzt ist," * Das ist das Problem. *** Benutze Layouts! *** –

Antwort

3

Wenn Sie einen JFrame verwenden, wie ich annehmen muss, können Sie die Beschriftungen zu einem JLayered-Bereich hinzufügen, der sich über dem Inhaltsbereich befindet.

1

Es gibt fast keine Fälle, in denen Sie das Null-Layout verwenden müssen. Sie müssen nur ein wenig Übung mit der LayoutManagers

machen Sie können das tun, was Sie mit einer JLayeredPane tun möchten. Gefällt mir:

import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JLayeredPane; 

public class Test { 
    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 

     frame.add(jLabelOnJButton()); 

     frame.setSize(300, 300); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

    private static JComponent jLabelOnJButton(){ 
     JLayeredPane layers = new JLayeredPane(); 

     JLabel label = new JLabel("label"); 
     JButton button = new JButton("button"); 

     label.setBounds(40, 20, 100, 50); 
     button.setBounds(20, 20, 150, 75); 

     layers.add(label, new Integer(2)); 
     layers.add(button, new Integer(1)); 

     return layers; 
    } 
} 

Das ist keine gute Lösung, denke ich. Tun Sie es nur, wenn Sie keine bessere Lösung haben.

Verwandte Themen