Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2016
    Messaggi
    21

    Help selezione dinamica

    BUONA SERA

    ho una serie di pannelli e dovrei fare in modo che quando ne viene cliccato uno si "accende"(dovrebbe cambiare colore ad esempio verde) e poi se ne viene cliccato un altro ,quello già cliccato si deve "spegnere" (cioè tornare al colore originale), e quello appena cliccato si deve accendere (cioè diventare verde)

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da toniCors Visualizza il messaggio
    ho una serie di pannelli
    Precisa il contesto: Swing? Quindi tecnicamente di cosa si tratta: JPanel?

    Se Swing/JPanel, allora:

    Quote Originariamente inviata da toniCors Visualizza il messaggio
    e dovrei fare in modo che quando ne viene cliccato uno si "accende"(dovrebbe cambiare colore ad esempio verde)
    Click in senso generico cioè in qualunque punto? Allora un MouseListener. Per il colore in generale del pannello: setBackground(Color).
    Nella maggior parte dei Look&Feel, JPanel è opaco per default. Comunque per sicurezza impostali opachi: setOpaque(true)

    Quote Originariamente inviata da toniCors Visualizza il messaggio
    e poi se ne viene cliccato un altro ,quello già cliccato si deve "spegnere" (cioè tornare al colore originale), e quello appena cliccato si deve accendere (cioè diventare verde)
    Se ne deduce che solo uno per volta deve essere "acceso". Quindi basta tenersi da qualche parte il riferimento al pannello "acceso" corrente. Al click su un altro puoi spegnere il corrente, accendere il nuovo e mettere il nuovo come corrente.

    Tutto qui (anche perché di più non si può dire ... non sapendo altro ).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2016
    Messaggi
    21
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Precisa il contesto: Swing? Quindi tecnicamente di cosa si tratta: JPanel?

    Se Swing/JPanel, allora:


    Click in senso generico cioè in qualunque punto? Allora un MouseListener. Per il colore in generale del pannello: setBackground(Color).
    Nella maggior parte dei Look&Feel, JPanel è opaco per default. Comunque per sicurezza impostali opachi: setOpaque(true)


    Se ne deduce che solo uno per volta deve essere "acceso". Quindi basta tenersi da qualche parte il riferimento al pannello "acceso" corrente. Al click su un altro puoi spegnere il corrente, accendere il nuovo e mettere il nuovo come corrente.

    Tutto qui (anche perché di più non si può dire ... non sapendo altro ).
    Ti Ringrazio per la precedente risposta
    in pratica ho un JPanel che ha come layout un GridLayout a questo JPanel aggiungo che due for annidati tanti JPanel cosi da formare una matrice di JPanel (e ogni uno di questi ha un MouseListener associato ) e prorio come hai capito anche tu dovrei fare in modo che ne puo essere "acceso " solo uno....ho capito la soluzione che mi hai suggerito ma non so come implementarla !!

    /**qui creo la matrice di JPanel (Posto panel estende JCompenent)
    int count =0;
    for (int row = 0; row < h; row++) {
    for (int column = 0; column < b; column++) {
    if((row>=x && row<=x1) && (column>=y && column<=y1))
    {PostoPanel prato = new PostoPanel(); panel.add(prato); }
    else {
    PostoPanel pixelPanel = new PostoPanel(count);
    pixelPanel.addMouseListener(new PostoListener(pixelPanel));
    panel.add(pixelPanel);
    count++;
    }

    }
    }

    /**questo è il listener

    class PostoListener implements MouseListener {

    private PostoPanel panel;

    public PostoListener(PostoPanel p) {
    panel = p;
    }

    public void mousePressed(MouseEvent event) {
    lpos.setText(""+ panel.geID());
    System.out.println(""+lpos.getText());

    panel.setBackgroundColor(Color.YELLOW);
    panel.repaint();
    //System.out.println("I was clicked.");
    //System.out.println(""+ panel.geID());
    }
    public void mouseClicked(MouseEvent arg0) {}
    public void mouseEntered(MouseEvent arg0) {}
    public void mouseExited(MouseEvent arg0) {}
    public void mouseReleased(MouseEvent arg0) {}
    }

    /**questo è Posto Panel

    public class PostoPanel extends JComponent {


    private static final int PIXEL_SIZE = 17;
    private Color backgroundColor;
    private int id;

    public PostoPanel(int i) {
    id =i;
    this.backgroundColor = Color.white;
    this.setBorder(BorderFactory.createLineBorder(Colo r.BLACK));
    this.setPreferredSize(new Dimension(PIXEL_SIZE, PIXEL_SIZE));
    }

    public PostoPanel() {

    this.backgroundColor = Color.GREEN;
    this.setBorder(BorderFactory.createLineBorder(Colo r.black));
    this.setPreferredSize(new Dimension(PIXEL_SIZE, PIXEL_SIZE));
    }

    public Color getBackgroundColor() {
    return backgroundColor;
    }


    public void setBackgroundColor(Color backgroundColor) {
    this.backgroundColor = backgroundColor;
    }

    public int geID(){
    return id;
    }

    protected void paintComponent(Graphics g) {
    super.paintComponent(g);


    g.setColor(getBackgroundColor());
    g.fillRect(0, 0, getWidth(), getHeight());
    }



    }**/

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.