2012-03-29 2 views
0

Итак, у меня есть gui, где макет установлен на Null, и я накладываю JLabels на JButtons, так как JButtons имеет значки и добавление текста к кнопке приводит к искажению кнопки, поэтому вместо этого я использую JLabels ontop JButtons. Каждый раз, когда мышь проходит над JButton, когда я его тестирую, JLabel исчезает. Как я могу исправить это, поэтому JLabels всегда появляются над JButtons.Как сделать JLabel всегда выше JButton?

Редактировать: он искажает кнопку, поэтому значок занимает больше всего места, а метка кнопки обрезается противоположным краем кнопки.

+0

Определить «искаженное»? – JTeagle

+0

* «Итак, у меня есть gui, где макет установлен на Null», - вот в чем проблема. *** Используйте макеты! *** –

ответ

3

Если вы используете JFrame, как я полагаю, вы должны добавить ярлыки в панель JLayered, которая находится поверх области содержимого.

1

Практически нет случаев, когда вам понадобится использовать нулевой макет. Вам просто нужно сделать небольшую практику с помощью LayoutManagers

Вы можете сделать то, что хотите, с помощью JLayeredPane. Например:

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

Это нехорошее решение, я думаю. Только делайте это, если у вас нет лучшего решения.

Смежные вопросы