Domanda

Ho 5 JButtons: B1, B2, B3, B4, B5. Per impostazione predefinita, il loro colore è grigio. Quando clicco su un pulsante, lo sfondo di quel pulsante diventa bianco. Quando clicco un altro pulsante, voglio che precedente pulsante cliccato per cambiare lo sfondo al grigio, e questo nuovo pulsante cliccato per cambiare lo sfondo al bianco. Ecco il codice che ho scritto:

int liveButton = 0; //holds the value of the button that is last clicked.
//0 indicates no button clicked (in the beginning)

private void ChangeInUsersList(int clickedButton) {
    switch(liveButton) {
        case 1 : b1.setBackground(Color.GRAY);
                 break;
        case 2 : b2.setBackground(Color.GRAY);
                 break;
        case 3 : b3.setBackground(Color.GRAY);
                 break;
        case 4 : b4.setBackground(Color.GRAY);
                 break;
        case 5 : b5.setBackground(Color.GRAY);
                 break;
        default: System.out.println("No button to change");
    }
    liveButton = clickedButton;// store the clicked button to change its
    //background later
}
private void b1ActionPerformed(java.awt.event.ActionEvent evt) {
    ChangeInUsersList(1);
    b1.setBackground(new java.awt.Color(255,255,255));
}

private void b2ActionPerformed(java.awt.event.ActionEvent evt) {
    ChangeInUsersList(2);
    b2.setBackground(new java.awt.Color(255,255,255));
}

private void b3ActionPerformed(java.awt.event.ActionEvent evt) {
    ChangeInUsersList(3);
    b3.setBackground(new java.awt.Color(255,255,255));
}

private void b4ActionPerformed(java.awt.event.ActionEvent evt) {
    ChangeInUsersList(4);
    b4.setBackground(new java.awt.Color(255,255,255));
}

private void b5ButtonActionPerformed(java.awt.event.ActionEvent evt) {
    ChangeInUsersList(5);
    b5.setBackground(new java.awt.Color(255,255,255));
}

Tuttavia, la sua non funziona come previsto. Quando clicco su un pulsante, il suo sfondo non cambia al bianco. Tuttavia, se clicco su qualche altro tasto, dopo che, il cambiamento di fondo doesnt dell'ex pulsante grigio. Ho provato a sostituire Color.GREY con nuova java.awt.Color (236.233.216) -. RGB per il colore grigio , ma il lavoro ancora doesnt

È stato utile?

Soluzione 3

ho riparato aggiungendo la seguente riga dopo aver dichiarato la variabile "liveButton":

Color buttonColor = b1.getBackground();

In seguito, all'interno la funzione ChangeInUsersList, ho sostituito "Color.GRAY" con buttonColor. E ha funzionato:)

Altri suggerimenti

Se mai do necessità di colorare un pulsante e quindi impostare il colore torna al suo stato originale di default (sistema di grigio), l'uso

button.setBackground(null);

Questo consente di eliminare ogni impostazione del colore precedente.

(Ho una domanda in cui ho bisogno di fare clic su alcuni pulsanti, tenere traccia di quali quelle che ho scattato, poi quando ho eseguito una funzione, I "deselezionare" di loro. Avrei potuto usare ginocchiera pulsanti, ma questo cambiare linea per aggiungere questa funzionalità era più facile che cambiare la mia intera gamma dei componenti. Inoltre, l'interfaccia utente "sentire" è giusto.)

Si prega di spiegare che cosa esattamente è che si vuole fare.

Da quello che hai scritto mi sembra di capire che stai cercando di avere un solo pulsante selezionato alla volta. Se è così sostituire le JButtons con JToggleButtons e metterli in una ButtonCroup . Per esempio. (Pseudo-codice):

//[...]
JToggleButton button2 = new JToggleButton(...)
//[...]
ButtonGroup group = new ButtonGroup();
//[...]
group.add(button2);
//[...]

Altrimenti se si voleva davvero cambiare i colori di sfondo dei tasti:

private List<JButton> buttons;
private JButton b1, b2, b3, b4, b5;
private void initButtons()
{
   buttons = new ArrayList<JButton>(5); // new List to "save" Buttons in
   buttons.add(b1 = new JButton());
   // etc etc ...
   buttons.add(b5 = new JButton());
}

public void setActiveButton(JButton button)
{
   for(JButton b : buttons)
   {
      b.setBackgroundColor(Color.GREY);
   } 
   button.setBackgroundColor(Color.WHITE);
}

private void b1ActionPerformed(java.awt.event.ActionEvent evt) 
{
   setActiveButton(b1);
   // or to be more "generic"
   // setActiveButton((JButton) evt.getSource());
}

Hai bisogno di entrambi setBackground(), setContentAreaFilled(false), setOpaque(true) nel pulsante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top