首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAVA中的JPanel内部JPanel

JAVA中的JPanel内部JPanel
EN

Stack Overflow用户
提问于 2018-06-10 03:34:12
回答 1查看 106关注 0票数 3
代码语言:javascript
复制
  public static void main(String[] args) {
      JTextField text = new JTextField();
      JFrame frame = new JFrame();
      frame.setLayout(new BorderLayout());      
      JPanel panel = new JPanel();
      panel.setLayout(new GridLayout(5, 4));
      JPanel panel2 = new JPanel();
      panel2.setLayout(new FlowLayout());



      JLabel imgLabel1 = new JLabel(new ImageIcon("C:\\Users\\Arthur\\Downloads\\abs.jpg"));
      JLabel imgLabel2 = new JLabel(new ImageIcon("C:\\Users\\Arthur\\Downloads\\abss.jpg"));


      imgLabel1.setPreferredSize(new Dimension(100,100));
      imgLabel2.setPreferredSize(new Dimension(100,100));

      panel2.add(imgLabel1);
      panel2.add(imgLabel2);


      for(int i=0; i<20; i++){
          panel.add(panel2);
      }


      frame.add(text, BorderLayout.NORTH);
      frame.add(panel, BorderLayout.CENTER);      
      frame.setPreferredSize(new Dimension(1280,700));
      frame.pack();
      frame.setVisible(true);      
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

我想制作一个记忆游戏,我需要在4x5的JPanel的每个单元格中放置两个图像。为此,我创建了一个包含两个图像的JPanel 1x2,并将其放入4x5的JPanel中。但结果是:

结果:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-10 04:26:18

所以,如果理解正确,你的问题是,你没有看到20个新的面板,只有一个。

问题是,一个组件只能驻留在一个容器中,只有一次,所以执行这样的操作.

代码语言:javascript
复制
for (int i = 0; i < 20; i++) {
    panel.add(panel2);
}

就相当于做了这样的事。

代码语言:javascript
复制
panel.add(panel2);

实际上,您需要在循环的每次迭代中创建组件的新实例。

我建议您做的是创建一个“包装”或“卡片”面板,可以包含这两个图像。在我的测试中,我只是用了彩色面板,但你知道.

代码语言:javascript
复制
public class WrapperPane extends JPanel {

    public WrapperPane() {
        setLayout(new FlowLayout());
        add(makePanel(Color.RED));
        add(makePanel(Color.GREEN));
        // This is just for demonstration purposes
        setBorder(new LineBorder(Color.DARK_GRAY));
    }

    protected JPanel makePanel(Color background) {
        JPanel panel = new JPanel();
        panel.setBackground(background);
        panel.setPreferredSize(new Dimension(100, 100));
        return panel;
    }

}

你只需要做些像..。

代码语言:javascript
复制
JTextField text = new JTextField();
JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(5, 4));

for (int i = 0; i < 20; i++) {
    panel.add(new WrapperPane());
}

frame.add(text, BorderLayout.NORTH);
frame.add(panel, BorderLayout.CENTER);
// Don't do this, just let the content make it's own
// calculations
//frame.setPreferredSize(new Dimension(1280, 700));
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

你最终会有这样的结果..。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50780340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档