Настройка расположения кнопки в jframe не работает - PullRequest
0 голосов
/ 03 октября 2019

У меня есть метод, который просто добавляет кнопку в JPanel. У меня проблема, однако, где есть некоторые свойства этой кнопки, которые я не могу изменить. Методы

setBackground и setLocation не влияют на кнопку вообще. Я пытаюсь переместить кнопку в нижнюю часть JPannel, но, кажется, ничего не происходит, когда я пытаюсь установить горизонтальное выравнивание или местоположение.

    public static void initButtons() {
        JButton purchaseButton = new JButton();
        purchaseButton.setText("Proceed to Checkout");
        purchaseButton.setPreferredSize(new Dimension(200,50));
        purchaseButton.setIcon(new ImageIcon("/Users/alecr/eclipse-workspace/MakingPurchases/src/shopping_cart_sprite.png"));
// set location method not working
        purchaseButton.setLocation(25, 600);

        JPanel firstPanel = new JPanel(); 
        firstPanel.setBounds(25, 40, 300, 700);
        firstPanel.setBackground(new java.awt.Color(90,90,100));
        firstPanel.setBorder(BorderFactory.createStrokeBorder(new BasicStroke(3.0f), new Color(70,70,80)));
        frame.add(firstPanel);

        firstPanel.add(purchaseButton);
    }

1 Ответ

1 голос
/ 03 октября 2019

Вместо использования setLocation и setBounds для каждого компонента, вы должны использовать правильный LayoutManager и позволить ему сделать всю работу за вас. Наличие жестко заданных размеров и местоположений не позволит вашему приложению масштабироваться под различные размеры экрана, и ваш JFrame не сможет изменять размер, что не так удобно для пользователя.

Однако, если вы настаиваете наиспользуя абсолютно жестко закодированные значения (координаты и размеры), вы должны удалить диспетчер компоновки из контейнера (JPanel использует FlowLayout по умолчанию), потому что, как я уже говорил, он заботится о таких вещах. Для этого:

JPanel panel = new JPanel(null); //null layout manager allows absolute values

...