JLabel не может быть выровнен по вертикали

#java

#java

Вопрос:

Я знаю, что они являются ответами на эти вопросы, но у меня это вообще не работает. Я пытался :

    /*
     titleTextLabel.setAlignmentX(JLabel.CENTER_ALIGNMENT);

     titleTextLabel.setAlignmentY(JLabel.CENTER_ALIGNMENT);

     titleTextLabel.setHorizontalAlignment(SwingConstants.CENTER);
     titleTextLabel.setVerticalAlignment(SwingConstants.CENTER); also JLabel.CENTER 
 /*
  

Но это вообще не сработало.
Вот полный код, если кто-то хочет проверить.

Если вы думаете, что проблема на стороне JFrame, это не так.Нет места для сбоя (базовый обычный материал)

Также я добавляю фотографию этого кода, а также приложения:https://imgur.com/a/TRkjgYv

     package com.practice;
    
    import javax.swing.*;
    import java.awt.*;
    
    public class Start extends JFrame {
    //Tutaj ustawiamy frame i pierwsze panele z napisem start
    
    
        // J-Obiekty itd
    
       private JPanel titleTextPanel, titleButtonPanel;
       private JLabel titleTextLabel;
       private JButton titleButton;
    
        Start(){
    
            this.setSize(1000,800);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setLayout(null);
            this.setLocationRelativeTo(null);
            this.getContentPane().setBackground(Color.darkGray);
    
    
            setUpStart();
    
            this.setVisible(true);
        }
    
      private   void setUpStart(){
            titleTextPanel=new JPanel();
            titleTextPanel.setBounds(200,50,600,150);
    
    
            titleTextLabel=new JLabel();
            titleTextLabel.setFont(new Font("Arial",Font.PLAIN, 30));
            titleTextLabel.setAlignmentX(JLabel.CENTER_ALIGNMENT);
            titleTextLabel.setAlignmentY(JLabel.CENTER_ALIGNMENT);
            titleTextLabel.setText("ASCENDING DARKNESS");
            titleTextPanel.add(titleTextLabel);
            this.add(titleTextPanel);
        }
    }
  

Комментарии:

1. Проверьте tutorialspoint.com /… .

2. Проблема в том, что ваш JLabel центрирует шрифт, но JLabel маленький, и он позиционируется в вашей titleTextPanel с помощью макета потока.

Ответ №1:

У вас есть пара проблем, во-первых, почему у вас есть вторая JPanel? JLabel не центрируется в JPanel, потому что он имеет макет потока.

Вместо использования второй JPanel вы можете просто использовать JLabel.

   private   void setUpStart(){
        titleTextLabel=new JLabel();
        titleTextLabel.setBounds(200,50,600,150);
        titleTextLabel.setFont(new Font("Arial",Font.PLAIN, 30));
        titleTextLabel.setHorizontalAlignment(JLabel.CENTER);
        titleTextLabel.setVerticalAlignment(JLabel.CENTER);
        titleTextLabel.setText("ASCENDING DARKNESS");
        titleTextLabel.setOpaque(true);
        titleTextLabel.setBackground(Color.WHITE);
        this.add(titleTextLabel);
    }
  

Комментарии:

1. что вы подразумеваете под второй JPanel. В коде есть только один

2. titleTextPanel это другая JPanel, в вашем JFrame есть панель содержимого, которая также является JPanel. Вы устанавливаете для его макета значение null.

3. вау, спасибо . Я думал, что должен добавить метку в панель, как будто метка была без границ и т.д. Большое вам спасибо

4. я хочу спросить, могу ли я добавить кнопку без JPanel. Как и его панель, верно?

5. Технически, есть панель, к которой добавляется компонент. В JFrame есть панель, панель содержимого. Если вы хотите добавить кнопку на панель содержимого, вы можете. Вы должны указать ему, куда поместить кнопку, хотя, поскольку вы установили макет в null. Например. myButton.setBounds(x, y, w, h);