Java GUI создает три JPanel в одном JFrame - PullRequest
0 голосов
/ 27 ноября 2011

У меня проблема с графическим интерфейсом Java.

Я хочу создать три JPanel экземпляра, размер которых отличается в одном JFrame. JFrame размер 300х800 и Panel1 300х200, Panel2 300х100 и Panel3 300х500. Я хочу добавить эти панели под, под.

Как решить эту проблему?

Ответы [ 2 ]

8 голосов
/ 27 ноября 2011

Используйте BorderLayout 1 .

  • Добавьте panel1 к NORTH
  • Добавьте panel2 к CENTER
  • Добавьте panel3 к SOUTH

EG

Colored Panels

Растяните свое воображение, что высоты десятьв разы больше.

import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;

class ColoredPanels {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JPanel gui = new JPanel(new BorderLayout(3,3));
                gui.setBackground(Color.BLUE);
                gui.setBorder(new EmptyBorder(5,5,5,5));

                JPanel panel1 = new JPanel();
                panel1.setPreferredSize(new Dimension(300,20));
                panel1.setBackground(Color.RED);
                gui.add(panel1, BorderLayout.NORTH);

                JPanel panel2 = new JPanel();
                panel2.setPreferredSize(new Dimension(300,10));
                panel2.setBackground(Color.ORANGE);
                gui.add(panel2, BorderLayout.CENTER);

                JPanel panel3 = new JPanel();
                panel3.setPreferredSize(new Dimension(300,50));
                panel3.setBackground(Color.YELLOW);
                gui.add(panel3, BorderLayout.SOUTH);

                // a frame would need pack() etc.
                JOptionPane.showMessageDialog(null, gui);
            }
        });
    }
}

КСТАТИ

  1. Использование BorderLayout, .. или BoxLayout, как упомянуто Shakedown.
  2. Панели, как описано, не будут вписываться в раму такого размера.Кадр имеет свои собственные украшения для учета (строка заголовка, меню, границы и т. Д.)
  3. Пожалуйста, используйте camelCase для имен атрибутов.
4 голосов
/ 27 ноября 2011

Вы можете попробовать определить размеры своих панелей с setPreferredSize() и компанией.Затем рассмотрите использование BoxLayout на вашем фрейме, который поместит ваши панели в ряд или столбец.

...