Разметки и / или метки Java в порядке - PullRequest
1 голос
/ 25 июля 2011

У меня есть окно, которое должно отображать следующее:

  • JLablel "Вы раньше пользовались GUI?" сверху, по центру
  • две радиокнопки «Да» и «Нет» под ним, несколько посередине, немного влево
  • a JButton "NEXT" в правом нижнем углу

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

        yesButton = new JRadioButton(yes);
        //yesButton.setMnemonic(KeyEvent.VK_B); // doesn't work?
        yesButton.setActionCommand(yes);            

        noButton = new JRadioButton(no);
        // noButton.setMnemonic(KeyEvent.VK_C); // doesn't work?
        noButton.setActionCommand(no);

        ButtonGroup group = new ButtonGroup();
        group.add(yesButton);
        group.add(noButton);

        nextButton = new JButton("NEXT");
        nextButton.setActionCommand(next);

        yesButton.addActionListener(this);
        noButton.addActionListener(this);
        nextButton.addActionListener(this);

        JPanel radioPanel = new JPanel(new GridLayout(0, 1));
        radioPanel.add(yesButton);
        radioPanel.add(noButton);

        add(radioPanel, BorderLayout.WEST);
        // setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
        // radioPanel.setBorder(new EmptyBorder(250, 250, 20, 20));
            // there is no difference between the above two, right?

        String q = "Have you used GUI before?";
        JPanel area = new JPanel(new BorderLayout());

        area.setBackground(Color.darkGray);
        JLabel textLabel2 = new JLabel("<html><div style=\"text-align: center;\">"
                + q + "</html>", SwingConstants.CENTER);
        textLabel2.setForeground(Color.green);
        Font font2 = new Font("SansSerif", Font.PLAIN, 30);
        textLabel2.setFont(font2);
        //textLabel2.setBorder(new EmptyBorder(0, 0, 250, 0)); //top, left, bottom, right
        area.add(textLabel2, BorderLayout.NORTH);
        area.add(nextButton, BorderLayout.EAST);
        add(area, BorderLayout.CENTER);

Я чувствую, что я почти у цели, спасибо за любую помощь!

- EDIT-- Скриншот: screenshot

Ответы [ 2 ]

3 голосов
/ 25 июля 2011

Вам нужно использовать вложенные панели.

  1. для BorderLayout.NORTH вы можете добавить JLabel напрямую.Вам необходимо установить горизонтальное выравнивание текста по центру.
  2. для переключателей вы можете создать JPanel с FlowLayout, а затем добавить кнопки на панель и добавить панель в CENTER.
  3. для кнопки вы добавляете кнопку на панель, используя FlowLayout, который выровнен по правому краю, затем добавляете панель на ЮГ.

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

1 голос
/ 25 июля 2011

Вы не сможете получить много контроля только с BorderLayout. Попробуйте что-нибудь еще, например, MigLayout или один из множества других менеджеров компоновки, которые есть в Java (GridBag, Box, etc ).

В MigLayout это будет выглядеть примерно так:

area.setLayout(new MigLayout("fill"));

area.add(textLabel2, "wrap");
area.add(radioPanel, "wrap");
area.add(nextButton, "tag right");
...