2013-02-07 2 views
0

J'essaie de faire ressembler l'échiquier à SWT, JAVA. J'ai essayé de faire un tableau de boutons, mais la couleur d'un bouton ne peut pas être changée (après une longue recherche que j'ai fait!). J'ai donc fait un tableau d'étiquettes que je peux changer de couleur, mais maintenant je ne peux pas les gérer dans un écouteur, et je ne pense pas que 64 écouteurs copier-coller soient la bonne chose à faire. Cependant, j'ai trouvé que setActionCommand n'est pas du tout pour les étiquettes.Gestion du tableau des labels listeners JAVA GUI

Avez-vous des suggestions que puis-je faire pour résoudre ce problème?

Merci.

+0

Jetez un oeil à [MouseListeners] (http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html) –

+0

Est-ce que http : //stackoverflow.com/questions/2535417/chess-board-in-java aide? – Apurv

+0

@zvika Ma réponse a-t-elle fonctionné pour vous? Si oui, s'il vous plaît upvote et acceptez-le. – Baz

Répondre

4

Vous pouvez utiliser le même Listener pour plusieurs Label s:

public static void main(String[] args) 
{ 
    final Display display = new Display(); 
    Shell shell = new Shell(display); 

    GridLayout layout = new GridLayout(8, true); 
    layout.horizontalSpacing = 0; 
    layout.verticalSpacing = 0; 

    shell.setLayout(layout); 
    shell.setText("Chess"); 

    /* Define listener once */ 
    Listener listener = new Listener() 
    { 
     @Override 
     public void handleEvent(Event event) 
     { 
      /* event.widget is the source of the event */ 
      if(event.widget instanceof Label) 
      { 
       System.out.println(event.widget.getData()); 
      } 
     } 
    }; 

    for(int i = 0; i < 64; i++) 
    { 
     Label label = new Label(shell, SWT.CENTER); 
     label.setText(i + ""); 
     label.setData(i); 

     /* Use listener here */ 
     label.addListener(SWT.MouseUp, listener); 


     label.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

     Color background = ((i + (i/8))%2 == 0) ? display.getSystemColor(SWT.COLOR_BLACK) : display.getSystemColor(SWT.COLOR_WHITE); 
     Color foreground = ((i + (i/8))%2 == 0) ? display.getSystemColor(SWT.COLOR_WHITE) : display.getSystemColor(SWT.COLOR_BLACK); 

     label.setBackground(background); 
     label.setForeground(foreground); 
    } 

    shell.pack(); 
    shell.setSize(200, 200); 
    shell.open(); 
    while (!shell.isDisposed()) 
    { 
     if (!display.readAndDispatch()) 
      display.sleep(); 
    } 
    display.dispose(); 
} 

Il va imprimer les données du Label en cliquant dessus.

ressemble à ceci:

enter image description here