Мне очень жаль, что я не знаю, почему метод setHorizontTextPosition и метод setVerticalTextPosition не работают.
Но я дам вам знать, что существует несколько способов сортировки текста в метку путем вставки параметров выравнивания со строкой при создании метки.
Прежде всего, ответ camickr - лучший ответ, потому что Swing был разработан для использования с менеджерами компоновки !!
Пожалуйста, помните, что наиболее рекомендуемым методом является применение GridBagLayout () к макету JFrame с помощью camickr.
Этот ответ предназначен для информирования вас Этот метод также возможен, но не рекомендуется в обычном случае
Использование этого метода не рекомендуется, поскольку изменение размера рамки сохраняет компоненты на месте, но может дать вам небольшая помощь, когда указано, что размер и расположение компонентов в контейнере используются таким образом, который может быть использован в особых случаях, с например, когда их нужно исправить без внешнего воздействия.
Чтобы получить более полное представление о проблеме, я просто изменю код, который вы загрузили мне, чтобы он мог выполняться.
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Color;
public class StackOver extends JFrame
{
private JLabel label;
public StackOver() //constructor
{
super("Simple GUI");
setLayout(null);
setSize(500,300);
label=new JLabel("Centered JLabel", JLabel.CENTER);
/*
label.setHorizontalTextPosition(SwingConstants.CENTER);
label.setVerticalTextPosition(SwingConstants.CENTER);*/
add(label);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new StackOver();
}
}
Хмм, давайте добавим немного цвета на фон JLabel, чтобы узнать больше.
label.setOpaque(true); //Transparency Settings
label.setBackground(Color.pink); //Specify background color
//to use 'Color' class, We must import java.awt.Color;
параметр JFrame был установлен на FlowLayout()
, что делает расположение и размер компонентов фиксированными, поэтому мы не могли видеть, как это работает!
Итак, теперь мы ' переходим к go через следующие два процесса. 1) Изменив макет JFrame на null, чтобы использовать Absolute Layout («не рекомендуется, просто случай»). 2) Изменив размер и расположение JLabel после процесса, мы увидим, что выравнивание текста работает!
1) Изменение макета JFrame
следующая ссылка : Диспетчер макетов показывает, что существует множество макетов вне FlowLayout.
Swing is предназначен для использования диспетчера макетов , поэтому, конечно, вы должны использовать одну из приведенных выше ссылок на макет.
Но, чтобы использовать интересный способ, абсолютно точно фиксирующий расположение и размер компонентов, перейдем на setLayout(null);
!
2) Изменение размера и местоположения JLabel
Мы можем напрямую изменить размер и положение JLabel с помощью setBounds(int startX, int startY, int Width, int Height)
method!
import java.awt.FlowLayout;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Color;
public class StackOver extends JFrame
{
private JLabel label;
public StackOver() //constructor
{
super("Simple GUI");
setLayout(null);
setSize(500,300);
label=new JLabel("Centered JLabel", JLabel.CENTER);
// Since it also sets the size of the JLabel,
//let's use the constructor to set the alignment of the text inside the JLabel.
label.setOpaque(true); //Transparency Settings
label.setBackground(Color.pink); //Specify background color
//to use 'Color' class, We must import java.awt.Color;
Rectangle r = this.getBounds(); //to get Frame Size
label.setBounds(r.x+100, r.y+100, r.width-200, r.height-200);
/*
label.setHorizontalTextPosition(SwingConstants.CENTER);
label.setVerticalTextPosition(SwingConstants.CENTER);*/
add(label);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new StackOver();
}
}
Теперь мы можем видеть текст JLabel в середине, как и предполагалось!
Этот метод может напрямую фиксировать размер и расположение всех компонентов (без кнопок), но расположение и размер компонентов являются фиксированными, даже если размер окна JFrame изменяется после запуска программы.
, поэтому, если вы действительно хотите установить компоненты абсолютно таким образом, лучше установить JFrame Resizable false на добавив код ниже к коду JFrame
this.setResizable(false);
Я надеюсь, что ответ был полезен для вас, и желаем вам спокойного дня!