2017-04-25 4 views
0

J'essaye de créer une classe de conseil qui étend JPanel pour un jeu de backgammon et un JLayeredPane pour créer une zone de glissement pour mes vérificateurs mais je ne peux même pas imprimer un rectangle simple au panneau . Il imprime l'image mais pas le JLabel. Voici ma classe JPanelJe ne peux pas voir le contenu dans le JLayeredPane dans un 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); 

} 

}

Et il est la principale

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

Comment puis-je résoudre? Merci les gars

+0

Votre 'JLayeredPane' n'est jamais ajouté à quoi que ce soit. – Berger

+0

vient d'ajouter la ligne add (lp) et j'ai quelque chose. Je suppose que je dois définir une mise en page pour lp alors ça ira. Merci –

Répondre

0

Vous devrez ajouter une mise en page à votre JLayeredPane, comme un GridLayout par exemple. Essayez ceci:

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

après l'initialisation lp. Ensuite, vous pouvez ajouter tous les composants que vous devez l'GridLayout, par exemple lp:

gl.add(lp) 

La mise en page va gérer la façon dont les choses seront affichées; dans ce cas, il remplira la grille depuis le GridLayout, d'abord la première rangée (dont 20 existent), puis la seconde et ainsi de suite (je ne pense pas que vous ayez besoin de 20 lignes, c'est comme ça dans mon exemple de code)

+0

J'ai essayé votre réponse mais toujours rien ne se présente. Edit: vient d'ajouter add (lp) à la méthode initComponents() et j'ai obtenu quelques résultats merci –

+0

Oui j'ai oublié d'ajouter l'ajout explicite de "lp" à theGridLayout dans ma réponse, éditera ma réponse en conséquence – Yato

+0

Je suis content aidé :) cela vous dérangerait de marquer cela comme correct alors que les autres utilisateurs peuvent voir ce qui vous a aidé? – Yato