Java 2 JPanel's в одном макете JFrame - PullRequest
3 голосов
/ 12 марта 2012

Привет. Я пытаюсь добавить 2 JPanel в JFrame, которые занимают всю ширину и высоту JFrame. Мне удалось добавить их с помощью GridBagLayout (), но я не могу установить размер JPanel с помощью setsize (). Я также пытался использовать ipady и ipadx, хотя сначала это работало, но после того, как я добавил некоторые кнопки, весь макет превратился в беспорядок. Вот мой код:

           JFrame tradeframe = new JFrame("Trade");
           JPanel P1panel = new JPanel();         
           P1panel.setBackground(Color.red);
           JPanel P2panel = new JPanel();
           P2panel.setBackground(Color.BLACK);


           tradeframe.setVisible(true);
           tradeframe.setSize(600, 400);
           tradeframe.setResizable(false);
           tradeframe.setLocationRelativeTo(null);
           tradeframe.setLayout(new GridBagLayout());

           P1panel.add(new JButton ("P1 Agree"));

           P2panel.add(new JButton ("P2 Agree"));


           GridBagConstraints a = new GridBagConstraints();
           a.gridx = 0;
           a.gridy = 0;
           a.weightx = 360;
           a.weighty = 300;
           //a.fill = GridBagConstraints.HORIZONTAL;
           tradeframe.add(P1panel , a);

           GridBagConstraints b = new GridBagConstraints();
           b.gridx = 1;
           b.gridy = 0;
           b.weightx = 360;
           b.weighty = 300;
          // b.fill = GridBagConstraints.HORIZONTAL;
           tradeframe.add(P2panel , b);

Как я могу сделать так, чтобы каждая JPanel имела ширину 300 пикселей и высоту 400 пикселей?

Ответы [ 5 ]

4 голосов
/ 12 марта 2012

для GridBaglayout Вы должны установить

  • заполнения

  • якорь

  • вес и вес

  • gridx / gridy (зависит от ориентации)

тогда возможно например

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

public class BorderPanels extends JFrame {

    private static final long serialVersionUID = 1L;

    public BorderPanels() {
        setLayout(new GridBagLayout());// set LayoutManager
        GridBagConstraints gbc = new GridBagConstraints();
        JPanel panel1 = new JPanel();
        Border eBorder = BorderFactory.createEtchedBorder();

        panel1.setBorder(BorderFactory.createTitledBorder(eBorder, "20pct"));
        gbc.gridx = gbc.gridy = 0;
        gbc.gridwidth = gbc.gridheight = 1;
        gbc.fill = GridBagConstraints.BOTH;
        gbc.anchor = GridBagConstraints.NORTHWEST;
        gbc.weightx = gbc.weighty = 20;
        add(panel1, gbc); // add compoenet to the COntentPane

        JPanel panel2 = new JPanel();
        panel2.setBorder(BorderFactory.createTitledBorder(eBorder, "60pct"));
        gbc.gridy = 1;
        gbc.weightx = gbc.weighty = 60;
        //gbc.insets = new Insets(2, 2, 2, 2);
        add(panel2, gbc); // add component to the COntentPane

        JPanel panel3 = new JPanel();
        panel3.setBorder(BorderFactory.createTitledBorder(eBorder, "20pct"));
        gbc.gridy = 2;
        gbc.weightx = gbc.weighty = 20;
        gbc.insets = new Insets(2, 2, 2, 2);
        add(panel3, gbc);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // important
        pack();
        setVisible(true); // important
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() { // important

            public void run() {
                BorderPanels borderPanels = new BorderPanels();
            }
        });
    }
}

в большинстве случаев лучше использовать другой LayoutManager

3 голосов
/ 12 марта 2012
    JFrame tradeframe = new JFrame("Trade");
    JPanel P1panel = new JPanel();         
    P1panel.setBackground(Color.red);
    JPanel P2panel = new JPanel();
    P2panel.setBackground(Color.BLACK);
    tradeframe.setSize(600, 400);
    tradeframe.setResizable(false);
    tradeframe.setLocationRelativeTo(null);

    Box content = new Box(BoxLayout.X_AXIS);

    P1panel.add(new JButton ("P1 Agree"));

    P2panel.add(new JButton ("P2 Agree"));

    content.add(P1panel);
    content.add(P2panel);

    tradeframe.setContentPane(content);
    tradeframe.setVisible(true);
2 голосов
/ 12 марта 2012

Вот способ сделать это:

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

public class GridBagLayoutTest
{
    public GridBagLayoutTest()
    {
        JFrame frame = new JFrame("GridBag Layout Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationByPlatform(true);

        Container container = frame.getContentPane();
        container.setLayout(new GridBagLayout());

        JPanel leftPanel = new JPanel();
        leftPanel.setBackground(Color.WHITE);
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.weightx = 0.5;
        gbc.weighty = 1.0;
        gbc.anchor = GridBagConstraints.FIRST_LINE_START;
        gbc.fill = GridBagConstraints.BOTH;

        container.add(leftPanel, gbc);

        JPanel rightPanel = new JPanel();
        rightPanel.setBackground(Color.BLUE);
        gbc = new GridBagConstraints();
        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.weightx = 0.5;
        gbc.weighty = 1.0;
        gbc.anchor = GridBagConstraints.FIRST_LINE_END;
        gbc.fill = GridBagConstraints.BOTH;

        container.add(rightPanel, gbc);

        frame.setSize(600, 400);
        frame.setVisible(true);
    }

    public static void main(String... args)
    {
        Runnable runnable = new Runnable()
        {
            public void run()
            {
                new GridBagLayoutTest();
            }
        };
        SwingUtilities.invokeLater(runnable);
    }
}

ВЫХОД:

GRIDBAG LAYOUT TEST

2 голосов
/ 12 марта 2012

Вызовите setPreferredSize(new Dimension(int width, int height)); метод на объектах вашей панели.

0 голосов
/ 12 марта 2012

Вы используете setSize() вместо setPreferredSize().Разница несколько вводит в заблуждение, и я бы посчитал это гочей в Java.Еще немного информации о том, в чем разница между ними, можно найти здесь.

Ссылка на статью, которую я приведу, содержит некоторые другие подводные камни / ошибки и полезное чтение, если вы новичок в Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...