【问题标题】:Cannot see the contents in the JLayeredPane in a JPanel在 JPanel 中看不到 JLayeredPane 中的内容
【发布时间】:2017-04-25 12:50:37
【问题描述】:

我正在尝试创建一个棋盘类来扩展 JPanel 用于双陆棋游戏和 JLayeredPane 来为我的跳棋创建一个拖动区域,但我什至无法在面板上打印一个简单的矩形。它确实打印图像,但不打印 JLabel。 这是我的 JPanel 类

public class BoardPanel extends JPanel{

private JLayeredPane lp;

private BufferedImage imageBoard;
private final int WIDTH = 1000;
private final int HEIGHT = 800;

private ArrayList<Slot> slotSet1;
private ArrayList<Slot> slotSet2;
private ArrayList<Slot> slotSet3;
private ArrayList<Slot> slotSet4;
private CheckerSet ch1;
public  Checker chc;

public BoardPanel(){

    initComponents();

}

private void initComponents(){

    lp = new JLayeredPane();

    setPreferredSize(new java.awt.Dimension(1500, 1000));

    //lp.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
    lp.setBorder(javax.swing.BorderFactory.createTitledBorder("asdadsaddadsadasdadsa"));
    lp.setMaximumSize(new java.awt.Dimension(1124, 904));
    lp.setMinimumSize(new java.awt.Dimension(1124, 904));


    try {
       imageBoard = ImageIO.read(getClass().getResource("/images/board.jpg"));
   } catch (IOException e) {
       System.out.println("file error");
   }

        JLabel label = new JLabel();
        label.setVerticalAlignment(JLabel.TOP);
        label.setHorizontalAlignment(JLabel.CENTER);
        label.setOpaque(true);
        label.setBackground(Color.BLACK);
        label.setForeground(Color.black);
        label.setBorder(BorderFactory.createLineBorder(Color.black));
        label.setBounds(0, 0, 50, 50);

    lp.add(label,JLayeredPane.DEFAULT_LAYER);


}
public void paintComponent(Graphics g){

    //g.drawImage(imageBoard,0,0,null);

}

}

还有主要的

 public static void main(String[] args){

    JFrame f = new JFrame();

    //GamePanel gp = new GamePanel();
    BoardPanel gp = new BoardPanel();

    f.add(gp);

    //f.getContentPane().add(gamePanel);
    f.setSize(new Dimension(1500, 1000));
    f.setVisible(true);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

我该如何解决?谢谢大家

【问题讨论】:

  • 您的JLayeredPane 永远不会添加到任何内容中。
  • 刚刚添加了 add(lp) 行,我得到了一些东西。我想我需要为 lp 设置一个布局,然后就可以了。谢谢

标签: java swing jpanel jlabel jlayeredpane


【解决方案1】:

您必须将布局添加到您的 JLayeredPane,例如 GridLayout。试试这个:

GridLayout gl = new GridLayout(20, 21);
lp.setLayout(gl);

在初始化lp 之后。然后您可以将您需要的所有组件添加到 GridLayout,例如 lp:

gl.add(lp)

布局将管理事物的显示方式;在这种情况下,它将从 GridLayout 填充网格,首先是第一行(其中存在 20 行),然后是第二行,依此类推(我认为您实际上不需要 20 行,就像我的示例代码)

【讨论】:

  • 我已经尝试了您的答案,但仍然没有任何结果。编辑:刚刚将 add(lp) 添加到 initComponents() 方法中,我得到了一些结果,谢谢
  • 是的,我忘记在答案中将“lp”显式添加到 theGridLayout,将相应地编辑我的响应
  • 很高兴它有帮助 :) 您介意将其标记为正确,以便其他用户可以看到对您有帮助吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 2016-08-21
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多