Как сделать так, чтобы JLabel всегда оставался выше JButton? - PullRequest
0 голосов
/ 29 марта 2012

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

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

Ответы [ 2 ]

3 голосов
/ 29 марта 2012

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

1 голос
/ 29 марта 2012

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

Вы можете делать то, что хотите, с 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;
    }
}

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

...