JButton по умолчанию в javax.swing. * - PullRequest
0 голосов
/ 30 марта 2019

Когда я компилирую свой код в Java swing, я получил Bounds по умолчанию.Кнопка, которая занимает весь размер кадра.Я попробовал 3 кнопки.Сначала я получил последнюю кнопку в качестве значения по умолчанию, затем я удаляю последнюю кнопку, которую получил следующую, одна из двух кнопок получила значение по умолчанию, как и предыдущие.Пожалуйста, помогите мне с этим.

! (https://mail.google.com/mail/u/1?ui=2&ik=ee9f500a4d&attid=0.1&permmsgid=msg-a:r2287244781956742986&view=att&disp=safe&realattid=f_jtvo6he20)

import javax.swing.*;
class rough{
    public static void main(String args[]){
        JFrame f=new JFrame("new");
        JButton b1=new JButton("click");
        JButton b2=new JButton("Hello");
        JButton b3=new JButton("like");
        b1.setBounds(20,20,100,50);
        b2.setBounds(120,20,100,50);
        b3.setBounds(220,20,100,50);
        f.add(b1);
        f.add(b2);
        f.add(b3);
        f.setSize(600,600);
        f.setVisible(true);
        f.setLayout(null);
    }
}

Ожидаемые результаты: кнопки в кадре 3 будут располагаться рядом. Фактический результат: одна кнопка по умолчанию.

1 Ответ

1 голос
/ 30 марта 2019

Вы звоните f.setVisible(true) до того, как вы установили менеджер раскладки, и поэтому графический интерфейс отображается с использованием BorderLayout по умолчанию в JFrame - то есть отображается только последний добавленный компонент.

A плохое решение состоит в том, чтобы сначала установить макет.

A Лучше Решение состоит в том, чтобы изучить, а затем использовать менеджеры компоновки соответствующим образом.

enter image description here

import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.*;

@SuppressWarnings("serial")
public class Rough2 extends JPanel {

    private static final int P_WIDTH = 600;
    private static final int P_HEIGHT = 400;

    public Rough2() {
        JPanel buttonPanel = new JPanel(new GridLayout(1, 0, 8, 8));
        String[] buttonNames = { "Click", "Hello", "Like" };
        for (String buttonName : buttonNames) {
            JButton button = new JButton(buttonName);
            int mnemonic = (int) buttonName.charAt(0);
            button.setMnemonic(mnemonic);
            button.setFont(button.getFont().deriveFont(Font.BOLD, 24f));
            buttonPanel.add(button);
        }

        setLayout(new GridBagLayout());
        add(buttonPanel);

        setPreferredSize(new Dimension(P_WIDTH, P_HEIGHT));
    }

    private static void createAndShowGui() {
        Rough2 mainPanel = new Rough2();

        JFrame frame = new JFrame("Rough2");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}
...