Я начинаю программу, в которой я создаю JFrame и добавляю в него JPanel, используя другой класс, который я создал, под названием StartPanel. Когда JPanel создает, он добавляет JLabel, как определено в классе StartPanel. Затем эта панель добавляется в JFrame. Некоторые свойства метки выражены в GUI (она добавляет себя на панель, может добавить красную рамку через нее, может изменить текст), но некоторые - нет. Например, я не могу изменить местоположение или размер этикетки.
Все, что я прочитал о проблеме до сих пор (я думаю), согласилось с моим подходом или не разъяснило многое. Кроме того, я добавил границы как в StartPanel, так и в метку, чтобы визуализировать проблему и убедиться, что метка не меняет свой размер. Я не могу настроить ни размер, ни расположение метки. Как я могу решить эту проблему и контролировать свойства метки?
Кроме того, я понимаю, что мог бы обойти всю проблему, не создавая панель через отдельный класс и объявив метку в той же функции. Тем не менее, этот проект будет довольно большим, поэтому я бы предпочел иметь систему классов, в которой я могу создать панель по мере необходимости.
Кодовое время:
Где я создаю фрейм и Панель с использованием класса:
public class StartFrame {
public StartFrame() {
JFrame frame = new JFrame("Constuctor tests");
frame.setSize(800, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
JPanel startPanel = new StartPanel(); //This is where I construct the panel
startPanel.setVisible(true);
startPanel.setBorder(BorderFactory.createLineBorder(Color.blue)); //Visualize the panel
frame.add(startPanel);
}
}
Класс StartPanel:
public class StartPanel extends JPanel {
public StartPanel() {
JLabel label = new JLabel("This is a label");
label.setLocation(100, 100); //It is not at 100,100
label.setSize(200, 100); //It is not a box this large
label.setBorder(BorderFactory.createLineBorder(Color.red)); //Done as to visualize it
label.setVisible(true);
add(label);
}
}
Наконец, изображение продукта: Конечный продукт
Большое спасибо за вашу помощь!