problema con BorderLayout

  • Creatore Discussione Creatore Discussione tony1
  • Data di inizio Data di inizio

tony1

Utente Attivo
8 Ago 2010
32
0
0
Per fare esercizio sto realizzando il gioco dell'impiccato.Non riesco però a visualizzare in un BorderLayout i pulsanti che rappresentano le lettere che vanno cercate.Vi posto il codice:
Codice:
import java.awt.*;
import java.awt.event.*;

import javax.swing.*; 

public class Impiccato extends JFrame {
	
	String[] alfa={"a","b","c","d","e","f","g","h","i","l","m","n","o","p","q","r","s","t","u","v","z"};
	JButton[] lettere=new JButton[21];
	ImageIcon icona=new ImageIcon("c:/java/Hangman0.gif");
	JLabel figure=new JLabel(icona);
	JLabel prova=new JLabel("Impiccato");
	JLabel prova1=new JLabel();
	JLabel prova2=new JLabel();
	
	
	public Impiccato(){
		setSize(300,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel pane=new JPanel();
		  pane.setLayout(new BorderLayout());
		  pane.add("North",prova);
		  pane.add("West",prova1);
		  pane.add("East",prova2);
		  pane.add("Center",figure);
		  for(int i=0;i<21;i++){
			  lettere[i]=new JButton(alfa[i]);
		      pane.add("South",lettere[i]);
		  }
		  setContentPane(pane);
		  setVisible(true);
		  
		 // for(int i=0;i<22;i++){
		 // lettere[i].addActionListener(this);
		 // }
	}
	
	public static void main(String[] args){
		  Impiccato im=new Impiccato();
	  }
	
	/*public void actionPerformed(ActionEvent e){
		if(e.getSource()==lettere){
			prova1.setText("ciao");
		}
	}*/
}
Mi visualizza solo il pulsante con la lettera z.
 
Innanzitutto BorderLayout suddivide il "contenitore" che ha questo layout solo in 5 aree. Punto. Solo queste. Quindi in una area es. SOUTH, puoi avere un (1) componente e basta.

Quindi devi ripensare bene la interfaccia utente. Ad esempio in SOUTH potresti mettere un JPanel che ha un BoxLayout orizzontale che contiene gli N JButton delle lettere. Oppure visto che sono tanti, un JPanel con un GridLayout di NxM celle.

Insomma, "inscatola" meglio componenti dentro contenitori, dentro ecc.... è così che si fa in Swing.

Infine, hai usato es:

pane.add("North",prova);

Non è sbagliato tecnicamente. Ma questo add è il

add(String name, Component comp)

che la documentazione ufficiale indica come "obsoleto". Dovresti usare l'altro add:

add(Component comp, Object constraints)

Quindi ad esempio:

pane.add(prova, BorderLayout.NORTH);

Usando le costanti di BorderLayout.
 

Discussioni simili