Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 43
  1. #1
    Utente di HTML.it L'avatar di userfra
    Registrato dal
    Jul 2001
    Messaggi
    1,418

    [JAVA swing] schacchiera

    Ciao a tutti, come posso realizzare un "scacchiera" 10*10 , le cui celle sono dei JButton?


    ideee..?
    -------------------------------------------------
    Il fumo nuoce gravemente alla salute

  2. #2
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281
    ciao usefra.

    tempo fa era uscita una discussione di questo tipo fatta da degno. mi sembra che su suo sito ci fossero degli esempi.

  3. #3
    Crei un JPanel a cui assegni un GridLayout. Poi crei un array bidimensionale di JButton e con 2 cicli for li aggiungi alla scacchiera:

    JPanel p = new JPanel();
    p.setLayout(new GridLayout(10,10));
    JButton[][] b = new JButton[10][10];

    for (int i = 0; i<10; i++) {
    for(int j = 0; j<10; j++) {
    k = j + 10*i;
    JButton[j][i] = new JButton("Pulsante num. " + k);
    p.add(JButton[j][i]);
    }
    }

  4. #4
    Utente di HTML.it L'avatar di userfra
    Registrato dal
    Jul 2001
    Messaggi
    1,418
    Originariamente inviato da pgm
    ciao usefra.

    tempo fa era uscita una discussione di questo tipo fatta da degno. mi sembra che su suo sito ci fossero degli esempi.

    Ciao pgm, ok guarderò!
    -------------------------------------------------
    Il fumo nuoce gravemente alla salute

  5. #5
    Utente di HTML.it L'avatar di userfra
    Registrato dal
    Jul 2001
    Messaggi
    1,418
    Originariamente inviato da battlehorse
    Crei un JPanel a cui assegni un GridLayout. Poi crei un array bidimensionale di JButton e con 2 cicli for li aggiungi alla scacchiera:

    JPanel p = new JPanel();
    p.setLayout(new GridLayout(10,10));
    JButton[][] b = new JButton[10][10];

    for (int i = 0; i<10; i++) {
    for(int j = 0; j<10; j++) {
    k = j + 10*i;
    JButton[j][i] = new JButton("Pulsante num. " + k);
    p.add(JButton[j][i]);
    }
    }
    Ciao

    ho aggiunto la variabile k dichiarandola, solo che in fase di compilazione mi da l'errore tipo che non riesce a risolvere la variabile JButton...
    -------------------------------------------------
    Il fumo nuoce gravemente alla salute

  6. #6
    Utente di HTML.it L'avatar di userfra
    Registrato dal
    Jul 2001
    Messaggi
    1,418
    ho risolto così:

    codice:
    JPanel p = new JPanel(); 
    int k=0;
    p.setLayout(new GridLayout(10,10)); 
    JButton b[][] = new JButton[10][10]; 
    for (int i = 0; i<10; i++) { 
    for(int j = 0; j<10; j++) { 
    k = j + 10*i; 
    b[j][i]  = new JButton("Num:" + k); 
    p.add(b[j][i]); 
    } 
    }

    grazie alla prossima
    -------------------------------------------------
    Il fumo nuoce gravemente alla salute

  7. #7
    Utente di HTML.it L'avatar di userfra
    Registrato dal
    Jul 2001
    Messaggi
    1,418
    Sentite... come faccio a dare un ActionEvent differente per ogni JButton creato?
    -------------------------------------------------
    Il fumo nuoce gravemente alla salute

  8. #8
    Si, hai ragione. Quando ho scritto il codice dovevo essere rapito da un alieno. E' evidente che la riga corretta era

    p.add(b([j][i]);
    e non

    p.add(JButton([j][i]));
    Per quanto riguarda l'ActionEvent, immagino che tu intenda un ActionListener. Secondo me ti conviene associare un ActionListener comune a tutti che distingue tra i vari JButton, altrimenti dovresti creare 100 oggetti ActionListener quando ne basta uno solo...

    Puoi fare una cosa del tipo :

    codice:
    public class MyActionListener implements ActionListener {
    	public void actionPerformed(ActionEvent ae) {
    		JButton selected = (JButton) ae.getSource();
    		// ora selected contiene il JButton che  stato selezionato. Per 
    		// ogni JButton puoi fare quello che ti serve. Ad esempio:
    		if (selected = b[0][0]) {
    			System.out.println("Hai premuto il bottone 0,0");
    		else if (selected = b[0][1]) {
    			System.out.println("Premi di nuovo questo bottone e formatto tutto!");
    		}
    		// ecc... ecc...
    }
    }
    e aggiungere fuori da ciclo for del codice precendente

    codice:
    ActionListener myone = new MyActionListener();
    e dentro al ciclo

    codice:
    b.addActionListener(myone);
    Come ti sembra ?

  9. #9
    Utente di HTML.it L'avatar di userfra
    Registrato dal
    Jul 2001
    Messaggi
    1,418
    ok...
    io avevo provato una soluzione di questo tipo:

    codice:
     b[j][i].addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                      if (e.getActionCommand().equals("N0")) {
    				  System.out.println("N0");}
                }
            );
    comunque anche la tua è valida



    -------------------------------------------------
    Il fumo nuoce gravemente alla salute

  10. #10
    Il tuo metodo é corretto, ma non crea 100 classi anonime una per ogni bottone?
    Non che abbia provato direttamente, ma penso che a livello di carico di lavoro per la jvm non sia una soluzione ottimale.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.