Вопрос

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

class ControlFrame extends JFrame 
    implements Runnable
{
    JButton jb_inc = new JButton();
    JButton jb_zero = new JButton();
    JButton jb_dec = new JButton();

    ControlFrame() {
        super("Control Frame");
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    ControlFrame(int x,int y, int w, int h) {
        this();
        this.setBounds(x, y, w, h);
        this.setVisible(true);

        jb_inc.setBounds(10,10,90,20);
        jb_zero.setBounds(10,40,90,20);
        jb_dec.setBounds(10,60,90,20);

        jb_inc.setVisible(true);
        jb_zero.setVisible(true);
        jb_dec.setVisible(true);

        this.getContentPane().add(jb_inc);
        this.getContentPane().add(jb_zero);
        this.getContentPane().add(jb_dec);

    }

    public void run() {
    }
}

public class Counting_Machine 
{
    public static void main(String[] args) {
        ControlFrame cf = new ControlFrame(0,200,80,150);
    }
}
Это было полезно?

Решение

Два предложения:

1) поместить общие вещи в блок инициализации экземпляра.Лично я вздрагиваю всякий раз, когда вижу вызов «this()».

{this.setDefaultCloseoPeration (windowsConstants.exit_on_close);}

ControlFrame () {super ("управление кадром");}

ControlFrame (int x, int y, int w, int h) {super ("управление кадром");...}

2) Я бы избавился от конструктора x, y, w, h...лично у меня есть класс WindowUtils, в котором есть метод «position», который определяет размер экрана, а затем использует переданные значения для создания окна, размер которого соответствует относительному размеру экрана.Затем код, создающий окно, вызывает это.Я предпочитаю иметь как можно меньше конструкторов (очень часто это ноль или один, у меня почти никогда не бывает двух или более).

3) this.getContentPane().add(jb_inc);теперь можно записать как add(jb_inc);- Я думаю, начиная с JDK 1.5.

4) никогда не вызывайте переопределяемые методы (все, что у вас есть, это.раньше) внутри конструктора.Если бы подкласс переопределил «добавить», вы могли бы увидеть, что все сломалось.Таким образом, вы можете вызвать super.add(), или добавить другие методы, или сделать свой класс финальным.

Теперь, чтобы ответить на ваш вопрос...:-)

Вам необходимо воспользоваться Менеджеры макетов чтобы получить то, что вы хотите.

В зависимости от того, что вы хотите, вы, вероятно, захотите использовать BorderLayout, чтобы получить кнопку внизу.

Другие советы

Я предлагаю вам начать с чтения раздела руководства по Swing на странице Использование менеджеров макетовВаш код не будет работать, потому что вы пытаетесь добавить 3 компонента в «центр» BorderLayout, что не сработает.Выберите LayoutManager, который лучше соответствует вашим потребностям.

При использовании менеджера компоновки нет необходимости использовать метод setBounds(...).Задача менеджера по расположению — позиционировать компоненты на основе правил менеджера по расположению.Предпочтительный размер каждой кнопки должен быть одинаковым, поскольку вы не добавляли к кнопкам никакого текста.

Кроме того, нет необходимости вызывать setVisible() для кнопок, все компоненты Swing видимы по умолчанию, за исключением контейнеров верхнего уровня (JFrame, JDialog).

Поскольку вы устанавливаете границы для всего, LayoutManager вам вообще не нужен.Установите для LayoutManager значение null, тогда вы сможете расположить все самостоятельно, как в вашем примере.

this.setLayoutManager(null)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top