2017-04-25 46 views
0

我正在尝试创建一个用于继承JPAMI的步步高游戏和JLayeredPane来为我的跳棋创建一个拖拽区域,但我甚至不能在面板上打印一个简单的矩形。它确实打印了图像,但没有打印JLabel。 这里是我的JPanel类无法看到JPanel中的JLayeredPane中的内容

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); 
} 

我该怎么解决呢?谢谢你们

+0

您的'JLayeredPane'永远不会被添加到任何东西。 – Berger

+0

刚刚添加行添加(lp),我得到了一些东西。我想我需要为LP设置一个布局然后它会没事的。谢谢 –

回答

0

你将不得不添加一个布局到你的JLayeredPane,例如GridLayout。试试这个:

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

初始化后lp。然后你就可以添加你需要的GridLayout的所有组件,比如LP:

gl.add(lp) 

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

+0

我已经试过你的答案,但仍然没有显示出来。编辑:刚添加(lp)到initComponents()方法,我得到了一些结果,谢谢 –

+0

是的我忘了在我的答案中添加显式添加“lp”到GridLayout,将相应地编辑我的响应 – Yato

+0

我很高兴它帮助:)你会介意标记这是正确的,以便其他用户可以看到什么帮助你? – Yato