Java - Как я могу редактировать размер и положение кнопки с помощью Swing? - PullRequest
1 голос
/ 18 января 2012

У меня есть следующий код, но я хотел бы структурировать несколько кнопок определенных размеров.Мне просто интересно, как это сделать, так как я погуглил и нашел несколько разных методов, но ни один из них не работает.Любой совет?

import javax.swing.*;

public class GUI {

    public static void main(String[] args) {

        JFrame window = new JFrame();
        window.setSize(500, 500);
        window.setTitle("My Application");

        JButton button = new JButton("click me");
        window.add(button);

        window.setVisible(true);

    }

}

Ответы [ 5 ]

2 голосов
/ 18 января 2012

Похоже, вы делаете свои первые шаги в разгаре.Вопросы, которые вы задаете, относятся к области графического дизайна, называемой макетом.Как именно вы устанавливаете положение своей кнопки, зависит от макета.Я бы посоветовал вам найти учебник по свингам и пробежаться по нему.Я начал с Java Swing Trail: http://download.oracle.com/javase/tutorial/uiswing

В документах Java API ищите BorderLayout и GridLayout.С них проще всего начинать.

2 голосов
/ 18 января 2012

Как правило, вы можете использовать setLocation и setSize методы.Однако лучше всего использовать менеджер макетов.Проверьте Использование Layout Managers учебник.В вашем случае по умолчанию используется BorderLayout.Если вам нужен абсолютный макет, вы можете установить его:

window.setLayout(null);

Затем вы должны указать размер и положение каждого компонента в этом контейнере.

РЕДАКТИРОВАТЬ:

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

2 голосов
/ 18 января 2012

От вашего вопроса, я думаю, вы пытаетесь сделать кнопку, чтобы соответствовать размеру окна.В этом случае вы бы использовали window.add(button, BorderLayout.CENTER);

Если вы пытаетесь использовать несколько кнопок, вам нужно использовать макет.Учебное пособие по созданию графических интерфейсов в разгаре с использованием макетов можно найти здесь .

1 голос
/ 18 января 2012

Вы действительно можете изменять размер вашего JButton разными способами, но это не очень хорошая практика - делать это в разгаре и явно присваивать значения размера различным компонентам.Вы должны лучше начать изучать Менеджеры по расположению .И будет намного мудрее, если вы также узнаете о Параллельности в Swing .

. Макет по умолчанию для JFrame - BorderLayout, а по умолчанию для JPanel - FlowLayout.Но что касается вашего вопроса, самый простой способ, который я могу придумать, заключается в следующем:

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.SwingUtilities;

public class GUI {

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable()
            {
                public void run()
                {
                    /*
                     * THe default Layout for the JFrame is the BorderLayout.
                     * Since you said you have some buttons, so I am giving
                     * you some idea how various buttons can be added to the 
                     * JFrame, with different values.
                     */
                    JFrame window = new JFrame();
                    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    window.setLocationRelativeTo(null);
                    window.setTitle("My Application");

                    JButton button1 = new JButton("Button1");
                    window.add(button1, BorderLayout.PAGE_START);                   

                    JButton button2 = new JButton("Button2");
                    window.add(button2, BorderLayout.WEST);

                    JButton button3 = new JButton("Button3");
                    window.add(button3, BorderLayout.CENTER);

                    JButton button4 = new JButton("Button4");
                    window.add(button4, BorderLayout.EAST);

                    JButton button5 = new JButton("Button5");
                    window.add(button5, BorderLayout.PAGE_END);

                    window.pack();
                    window.setVisible(true);
                }
            });

    }

}

Надеюсь, это может вам как-то помочь.

С уважением

0 голосов
/ 18 января 2012

A JButton расширяет AbstractButton, что, в свою очередь, расширяет JComponent, поэтому, как и в случае наследования, вы можете используйте все методы, предоставляемые JComponent.

Методы, которые вы должны рассмотреть:

setMaximumSize(Dimension maximumSize) Sets the maximum size of this component to a constant value.
setMinimumSize(Dimension minimumSize) Sets the minimum size of this component to a constant value.

Более того, JComponent расширяет Component, что обеспечивает, и вы можете использовать,

setSize(Dimension d) Resizes this component so that it has width d.width and height d.height.
setSize(int width, int height) Resizes this component so that it has width width and height height.

см. Наследование ниже:

java.awt.Component
    java.awt.Container
        javax.swing.JComponent
            javax.swing.AbstractButton
                javax.swing.JButton
...