Visualizzazione dei risultati da 1 a 9 su 9

Discussione: JLabel non visibili

  1. #1

    JLabel non visibili

    Ciao ragazzi
    Ho un problema con questo codice:

    codice:
    package gui;
    
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.Toolkit;
    import javax.swing.Box;
    import javax.swing.BoxLayout;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    import singleplayer.Partita;
    
    @SuppressWarnings("serial")
    public class GuiPartita extends JFrame 
    {
    	private String url = "images/sfondotavolo.jpg";
    	private MyPanel sfondo;
    
    	private Partita p;
    	
    	private JPanel nord;
    	private JPanel centro;
    	private JPanel sud;
    	
    	private Box boxes[];
    	
    	private JLabel computer;
    	
    	//label che rappresentano le carte del computer
    	private JLabel avvUno;
    	private JLabel avvDue;
    	private JLabel avvTre;
    	
    	//pulsanti che rappresentano le carte del giocatore
    	private JButton gioUno;
    	private JButton gioDue;
    	private JButton gioTre;
    	
    	//pulsante associato al mazzo
    	private JButton gioMazzo;
    	
    	public GuiPartita(String titolo, Partita p) {
    		
    		super(titolo);
    		this.p = p;
    		
    		sfondo = new MyPanel(url);
    		
    		Container c = this.getContentPane();
    		sfondo.setLayout(new BorderLayout());
    		c.add(sfondo);
    		
    		boxes = new Box[3];
    		
    		boxes[0] = Box.createHorizontalBox();
    		boxes[1] = Box.createHorizontalBox();
    		boxes[2] = Box.createHorizontalBox();
    		
    		//ZONA NORD: AVVERSARIO
    		computer = new JLabel("Computer");
    		nord = new JPanel(new BorderLayout());
    		nord.setOpaque(false);
    		nord.add(computer, BorderLayout.NORTH);
    		
    		avvUno = new JLabel();
    		avvUno.setPreferredSize(new Dimension(117,185));
    		avvUno.setBackground(Color.BLACK);
    		avvDue = new JLabel();
    		avvDue.setPreferredSize(new Dimension(117,185));
    		avvDue.setBackground(Color.BLACK);
    		avvTre = new JLabel();
    		avvTre.setPreferredSize(new Dimension(117,185));
    		avvTre.setBackground(Color.BLACK);
    		
    		boxes[0].add(Box.createRigidArea(new Dimension(330,190)));
    		boxes[0].add(avvUno);
    		boxes[0].add(Box.createRigidArea(new Dimension(25,185)));
    		boxes[0].add(avvDue);
    		boxes[0].add(Box.createRigidArea(new Dimension(25,185)));
    		boxes[0].add(avvTre);
    		boxes[0].add(Box.createRigidArea(new Dimension(25,185)));
    		
    		nord.add(boxes[0], BorderLayout.CENTER);
    		sfondo.add(nord, BorderLayout.NORTH);
    		
    		/////////////
    		
    		Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
    		int screenWidth = (int) screen.getWidth();   //altezza schermo
    		int screenHeight = (int) screen.getHeight(); //larghezza schermo
    		int x = (screenWidth/2)-(750/2);             //coordinata x del punto
    		int y = (screenHeight/2)-(703/2);            //coordinata y del punto 
    		this.setLocation(x, y);
    		this.setSize(750, 703);
    		this.setResizable(false);
    		this.setVisible(true);
    		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    	}
    }
    Le label avvUno, avvDue, avvTre alle quali ho impostato una dimensione e uno
    sfondo nero non vengono visualizzate. Cosa sbaglio? Grazie

  2. #2
    prova ad utilizzare setSize e non setPreferedSize....

  3. #3
    Nessuna differenza.

    Non so forse faccio qualche cacchiata con il BoxLayout.. è la prima volta che lo uso.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Purtroppo BoxLayout è abbastanza rognoso.
    Perchè tutto funzioni è necessario che i componenti che vengono aggiunti al contenitore con BoxLayout abbiano impostate tutte le seguenti dimensioni:

    - preferredSize
    - minimumSize
    - maximumSize

    Altrimenti non c'è verso.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Boh non cambia niente

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    5
    Originariamente inviato da Javino89
    Boh non cambia niente
    Dopo set background... prova a mettere

    SetVisible(true)

    Per tutte e tre label.

  7. #7
    Non cambia nulla. Penso sia un effettivo problema di layout.. precisamente di dimensioni.

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Javino89
    Non cambia nulla. Penso sia un effettivo problema di layout.. precisamente di dimensioni.
    Considera che non hai settato le label come opache, quindi non ne vedrai mai lo sfondo nero. Settale opache, dagli le dimensioni preferred, maximum e minimum e come per magia compariranno.

    Considera, inoltre, che per centrare la finestra non hai bisogno di fare tutti quei calcoli: settane la dimensione e richiama "setLocationRelativeTo( null )". Fa tutto lui.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Oh che bello! Ora sono comparse! Non mi resta che fare qualche piccolo aggiustamento e cambiare lo sfondo nero con un .jpg.. Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.