Java: JLabel не меняет своё положение

239
14 апреля 2022, 20:00

Я изучаю графическую библиотеку swing и столкнулся с проблемой - текст не изменяет своё положение относительно jpanel при изменении параметров setVerticalAlignment и setHorizontalAlignment. Я не могу понять, в чём проблема. Скажите пожалуйста, как это исправить. Вот сам код:

import java.awt.*;
import javax.swing.*;
public class Display extends Java_Panel{
    public static Java_Panel Java_Panel = new Java_Panel();
    public static Java_Frame Java_Frame = new Java_Frame(Java_Panel);
    public static void main(String[] args){
        Java_Panel.ACI_Start(Label_Container.F_Label);
    }
}
public class Java_Frame extends JFrame{
    public Java_Frame(Java_Panel Java_Panel){
        super("DoW");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setUndecorated(true);
        add(Java_Panel);
        setVisible(true);
    }
}
public class Java_Panel extends JPanel{
    public Java_Panel(){
        super();
        setBackground(Color.BLACK);
        add(Label_Container.F_Label);
    }
    public void ACI_Start(Java_Label Java_Label){
        for(int alpha_channel = 0; alpha_channel < 255; alpha_channel++){
            Java_Label.setForeground(new Color(255, 255, 255, alpha_channel));
            Java_Label.repaint();
            try {
                Thread.sleep(8);
            } catch (InterruptedException InterruptedExpection) {
                return;
            }
        }
    }
}
public class Java_Label extends JLabel{
    public Java_Label(String java_string, Color Color,
                        String Font_Name, int Font_Size){
        super(java_string);
        setForeground(Color);
        setVerticalAlignment(JLabel.CENTER);
        setHorizontalAlignment(JLabel.CENTER);
        setFont(new Font(Font_Name, Font.PLAIN, Font_Size));
    }
}
public class Label_Container{
    static Java_Label F_Label = new Java_Label("Some_Text", new Color(255, 255, 255, 0),
                                        "Arial", 50);
}
Answer 1

setVerticalAlignment и setHorizontalAlignment насколько я помню, управляют не расположением самого JLabel внутри JPanel, а расположением текста внутри JLabel. По умолчанию JLabel занимает столько места, сколько в нем текста. То есть, чтобы увидеть действие этих методов, нужно принудительно задать размеры JLabel с помощью метода setPreferredSize(new Dimansion(100, 100)); Например, создав, такой JLabel внутри функции main()

 JLabel topLabel = new JLabel("Top");
          topLabel.setVerticalAlignment(JLabel.TOP);
          topLabel.setHorizontalAlignment(JLabel.CENTER);
          topLabel.setPreferredSize(new Dimansion(100, 100));
          topLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1);
          topLebel.setForeground(Color.GREEN);

И добавив его на панель, мы должны будем наглядно увидеть такую картину:

А если изменить значение метода setHorizontalAlignment на RIGHT, а setVerticalAlignment() оставить как есть, то увидим следующее:

То есть мы действительно управляем выравниванием текста внутри JLabel

Выравнивание самого JLabel внутри JPanel осуществляется с помощью метода JPanel.setLayout(); в который передаются специальные объекты. Они называются менеджеры компоновки.

READ ALSO
C# Как скачать natives/ для майнкрафта

C# Как скачать natives/ для майнкрафта

Я пишу свой лаунчер МайнкрафтаМне нужны все библиотеки Майнкрафта (dll файлы, LWJGL, OpenAL и другие)

202
Не понимаю принцип работы метода

Не понимаю принцип работы метода

Это часть кода мобильной игры:

211