【问题标题】:How to for loop jPanel in jFrame?如何在jFrame中循环jPanel?
【发布时间】:2019-07-07 10:36:15
【问题描述】:

我可以知道为什么我的 jPanel 没有出现在 jFrame 中吗?我想让 5 个蓝色 jPanel 出现在 jFrame 中,但为什么只有 1 个蓝色 jPanel 出现在我的 jFrame 中?感谢您的帮助!

public class NewJFrame2 extends javax.swing.JFrame {

    JFrame frame = new JFrame();
    JPanel panel = new JPanel();
/**
 * Creates new form NewJFrame2
 */
public NewJFrame2() {
    initComponents();
    JPanel[] panelArray = new JPanel[5];
    JButton btnArray[] = new JButton[5];
    for(int i = 0; i<5;i++)
    {
        panelArray[i] = new JPanel();
        //panelArray[i].setVisible(true);
        System.out.println(panelArray[i]);
        javax.swing.border.Border border = BorderFactory.createLineBorder(Color.BLUE, 5);
        panelArray[i].setBackground(Color.YELLOW);
        panelArray[i].setBorder(border);
        frame.getContentPane().add(panelArray[i]);

    }

    frame.setSize(new Dimension(500, 400));

    frame.setLocationRelativeTo(null);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.setTitle("A Simple JFrame");

    frame.setVisible(true);
}

【问题讨论】:

  • 您的JFrame 上设置了LayoutManager 吗?
  • 没有。布局管理器的作用是什么?
  • 下面的链接答案提供了比我更多的信息。但简而言之,如果没有一个框架,当您添加它们时,框架不知道 在哪里 放置它们,因此只需将它们全部放在另一个之上。使用LayoutManager,它可以管理正在添加的东西的布局。

标签: java swing layout-manager


【解决方案1】:

如 cmets 中所述,您需要一个 LayoutManager。

当前的问题是您将所有五个面板添加到框架上完全相同的空间。要解决这个问题,您需要为框架提供一个结构,以将不同的坐标与不同的区域相关联。

This answer 包含一个很好的起点,可以让您开始使用 Java 中的布局。

【讨论】:

    【解决方案2】:

    将容器 JPanel 与 BoxLayout 一起使用 -- 请参阅下面的 cmets 了解更多信息:

        initComponents();
        JPanel[] panelArray = new JPanel[5];
        JButton btnArray[] = new JButton[5];
        JPanel container = new JPanel(); // Container JPanel   
        container.setLayout(new BoxLayout(container, BoxLayout.X_AXIS)); // With a BoxLayout
        for (int i = 0; i < 5; i++) {
            panelArray[i] = new JPanel();
            //panelArray[i].setVisible(true);
            System.out.println(panelArray[i]);
            javax.swing.border.Border border = BorderFactory.createLineBorder(Color.BLUE, 5);
            panelArray[i].setBackground(Color.YELLOW);
            panelArray[i].setBorder(border);
            container.add(panelArray[i]);   // Adding 5 JPanels to container JPanel
        }
        frame.getContentPane().add(container); // Adding container JPanel to JFrame
        frame.setSize(new Dimension(500, 400));
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("A Simple JFrame");
        frame.setVisible(true);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-22
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 2011-09-22
      • 2015-11-25
      • 1970-01-01
      相关资源
      最近更新 更多