Промежуточные метки и кнопки в Java - PullRequest
2 голосов
/ 28 июня 2011

Я все еще разбираюсь со старым графическим интерфейсом Java и наткнулся на своего рода пень. Просто весь графический интерфейс еще свеж, и я использовал только FlowLayout (), и я думаю, что то, что я ищу, не может быть сделано с этим. Это не для домашней работы или чего-то еще, просто то, над чем я работаю. В любом случае, моя проблема:

В принципе, я хочу, чтобы это выглядело так

Welcome!
Today's Date is: 
(space)
(space)
Exit button

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

private void welcomeTab(){
    welcomePanel = new JPanel(new FlowLayout());
    String currentTime = SimpleDateFormat.getInstance().format(
    Calendar.getInstance().getTime());
    final JLabel welcomeLabel = new JLabel("Welcome!", JLabel.CENTER);
    final JLabel dateLabel = new JLabel ("Today's date is: " + currentTime, JLabel.CENTER);
    welcomePanel.add(welcomeLabel);
    welcomePanel.add(dateLabel);
    welcomePanel.add(createExitButton());
}

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

Ответы [ 4 ]

6 голосов
/ 28 июня 2011

Как-то так?

Welcome Panel

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.Calendar;
import java.text.SimpleDateFormat;

class WelcomeLayout {

    private JPanel welcomePanel;

    WelcomeLayout() {
        welcomeTab();
        welcomePanel.setBorder(new TitledBorder("The Welcome Panel"));
        JOptionPane.showMessageDialog(null, welcomePanel);
    }

    private void welcomeTab() {
        welcomePanel = new JPanel(new GridLayout(0,1,1,1));
        String currentTime = SimpleDateFormat.getInstance().format(
        Calendar.getInstance().getTime());
        final JLabel welcomeLabel = new JLabel("Welcome!", JLabel.CENTER);
        final JLabel dateLabel = new JLabel ("Today's date is: " + currentTime, JLabel.CENTER);
        welcomePanel.add(welcomeLabel);
        welcomePanel.add(dateLabel);

        // one (kludgy) way to addd space.
        welcomePanel.add(new JLabel(""));
        welcomePanel.add(new JLabel(""));

        welcomePanel.add( createExitButton() );
    }

    private JComponent createExitButton() {
        JButton exit = new JButton("Exit");
        // the FlowLayout is to center the JButton;
        JPanel exitPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
        exitPanel.add(exit);
        return exitPanel;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                WelcomeLayout wl = new WelcomeLayout();
            }
        });
    }
}

Использование BoxLayout в соответствии с предложением Талхи Ахмеда Хана / Зейчина

enter image description here

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.Calendar;
import java.text.SimpleDateFormat;

class WelcomeBoxLayout {

    private JPanel welcomePanel;

    WelcomeBoxLayout() {
        welcomeTab();
        welcomePanel.setBorder(new TitledBorder("The Welcome Panel"));
        JOptionPane.showMessageDialog(null, welcomePanel);
    }

    private void welcomeTab() {
        welcomePanel = new JPanel();
        BoxLayout layout = new BoxLayout(welcomePanel, BoxLayout.Y_AXIS);
        welcomePanel.setLayout(layout);
        String currentTime = SimpleDateFormat.getInstance().format(
        Calendar.getInstance().getTime());
        final JLabel welcomeLabel = new JLabel("Welcome!", JLabel.CENTER);
        final JLabel dateLabel = new JLabel ("Today's date is: " + currentTime, JLabel.CENTER);
        welcomePanel.add(welcomeLabel);
        welcomePanel.add(dateLabel);

        welcomePanel.add( Box.createVerticalStrut(20) );

        welcomePanel.add( new JButton("Exit") );
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                WelcomeBoxLayout wl = new WelcomeBoxLayout();
            }
        });
    }
}
4 голосов
/ 28 июня 2011

Попробуйте добавить Box.createHorizontalStrut(i_width)

welcomePanel.add(welcomeLabel);
welcomePanel.add( Box.createHorizontalStrut(10) );
welcomePanel.add(dateLabel);
welcomePanel.add( Box.createHorizontalStrut(10) );
welcomePanel.add(createExitButton());
2 голосов
/ 28 июня 2011

Похоже, вы хотите использовать вертикальный BoxLayout. Я не уверен, что имел в виду Талха Ахмед Хан, потому что горизонтальные распорки определяют количество горизонтального пространства между двумя элементами.

Эта ссылка должна помочь: http://download.oracle.com/javase/tutorial/uiswing/layout/box.html

и вот прямая ссылка на источник для первого примера на этой странице: http://download.oracle.com/javase/tutorial/uiswing/examples/layout/BoxLayoutDemoProject/src/layout/BoxLayoutDemo.java

1 голос
/ 28 июня 2011

GridBagLayout в лучшем виде с Netbeans 7.0 .Проверьте это, вы не пожалеете.

Предложение:

Решите вашу проблему с помощью Netbeans GridBagLayout Designer , а затем прочитайтесгенерированный код для понимания исправления.

Отказ от ответственности:

Написание пользовательского кода может быть очень сложным.Вы должны ознакомиться с этим.Он предоставляет хуки для добавления пользовательского кода в большинстве мест.Но все же я нахожу это очень громоздким.Вы должны отсортировать это самостоятельно.

...