Chamar valor anterior do progressbar

então tenho o seguinte codigo pra adicionar e tirar o valor em uma jprogress

 if (PickRadiant1.getSelectedItem().equals("Anti-Mage")) {
            if (Hcpick1R==0) {
            HC.setValue(HC.getValue()+20);
            Hcpick1R = 1;
          }
          
          if (Suppick1R==1) {
                Sup.setValue(-Sup.getValue());
                Suppick1R = 0;
            }
          if (Resispick1R==1) {
              Tank.setValue(Tank.getValue()-20);
              Resispick1R = 0;
          }
          if (Utipick1R==1) {
                UT.setValue(UT.getValue()-20);
                Utipick1R = 0;
            }
            if (Dpspick1R==1) {
              Explo.setValue(Explo.getValue()-20);
              Dpspick1R = 0;
            }
        }

pra adicionar eu coloco 20, e pra tirar 20 tb, porem em algumas outras opçoes de getselected eu quero colocar 10 , 15 etc, como faço pra colocar outros valores e tirar o valor anterior? fazer com q o programa saiba quando tirar 20 15 e etc, lembrando que eu tenho 2 combo box que acumulam o valor, se eu usar simplesmente Explo.setValue(-Explo.getValue());
ele vai tirar o valor da combo box 1 e 2 e deixar em 0; quero q tire o valor apenas da combobox 1

Bom, talvez, você devesse zerar os jProgress, e adicionar conforme o herói.
você poderia criar uma classe para cada heroi e assim buscar seus atributos usando get.
Sup.setValue(AntiMage.getSup());
HC.setValue(AntiMAge.getHC());

Então até fiz isso, mas ai não vai acumular com a outra combo box
Exemplo: a combo box 1 eu seleciono Anti mage e adiciona uns 30% na jprogressHC, na combo box 2 eu seleciono Alchemist que adiciona mais 20% e ficaria 50%, somando os 2 a HC ficaria 50% porém se eu selecionar um suporte na combo box 1 ou 2 ele não vai tirar o valor somente do Anti mage e sim dos 2 , anti mage e Alchemist são hc, e se eu colocar um suporte na combo box 1 ou 2 ele vai tirar o valor dos 2, meu problema está sendo em tirar o valor, colocar eu até consigo. To começando java agora e decidi criar um programa de dota 2, assim me estimula mais a fazer , já q to sem ideia pra outras coisas

Pensei em criar um if pra verificar qual heroi tá selecionado e tirar o valor dele, mas o código ficaria mt grande (120 herois 120 if)
Vou tentar colocar um for junto do if, assim o código n fica grande, se funcionar aviso

e se você somar novamente?
exemplo, AntiMage + invoker dá 40 de HC.
30 do antimage e 10 do invoker.
daí quando vc trocar o combobox o antimage, ele verificaria o combobox ao lado…zeraria e somaria novamente.

Melhor, faça um método só, que some os dados.
e cada vez que você alterar o combobox, chama ele, e ele verifica os itens selecionados e soma.

Creio que seja possível utilizar o padrão Memento (lembrança).
Veja se não seria possível realizar as adaptações necessárias.
Assista o vídeo:

1 curtida

Então fiz o codigo da seguinte maneira

// identificar qual o combo box
int HeroiSelecionado1;
int HeroiSelecionado2;

// identificar o valor de cada heroi (adicionei 2 como exemplo
int HeroiHc[] = {20, 40};

e na combo box o seguinte

if (jComboBox2.getSelectedItem().equals("Abbadon")) {
            HeroiSelecionado2 = 0;
            for (int c = 0; c < 100; c++) {
                     if (c == c && HeroiSelecionado2 == c) {
                      HC.setValue(HC.getValue()+HeroiHc[c]);
                    }
            } 
        }

e deu certo, porem agora to com outra dificuldade (novidade), sempre q eu seleciono o mesmo item ele soma o valor
exemplo eu selecionar 2x a abbadon na combo box 1 vai somar o valor 2x, como faço pra SOMENTE a abbadon n ser selecionada 2x? falei somente pq eu fiz um codigo q faz n ser selecionado 2x, mas ai n consigo mudar depois pra um alchemist e etc

Eu como eu falei, você deveria ter feito o método para a soma, e aí sempre que selecionar um dos dois, só chamaria o método.

o método limparia a soma, e somaria de novo, fazendo isso, mesmo que você troque para o mesmo, a soma não incrementaria.

Da forma como esta, se você selecionar 20 vezes, vai somar as vinte vezes.
Minha avaliação é que não é bom usar o combobox para ficar atualizando algo.
O ideal é selecionar e usar um botão para confirmar a atualização do status.
Você pode criar uma lista a parte para ver quem foi atualizado e controlar o limite de atualizações.

Vou apresentar um exemplo, sem muito comprometimento, necessitando de algumas fatorações, considerando a situação atual:

package gamer;

import java.awt.BorderLayout;
import java.awt.event.ItemEvent;
import java.util.HashSet;
import java.util.Set;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;

public class Teste {

    private final static Set<Heroi> ATUALIZADO = new HashSet<>();

    public static void main(String[] args) {
        JFrame frame = new JFrame("Teste combobox");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 400);
        frame.setLayout(new BorderLayout(15, 15));
        JComboBox heroi = new JComboBox(new DefaultComboBoxModel(new Object[]{"Selecione um Heroi", new Hazuma(), new Kahara(), new Kamia()}));
        frame.add(heroi, BorderLayout.NORTH);
        heroi.addItemListener(evt -> {
            if (evt.getStateChange() == ItemEvent.SELECTED && heroi.getSelectedIndex() > 0) {

                Heroi heroiSelecionado = (Heroi) heroi.getSelectedItem();
                if (ATUALIZADO.add(heroiSelecionado) || heroiSelecionado.getClass() != Hazuma.class) {
                    System.out.println(heroiSelecionado.getNome() + " -> Habilidade: " + heroiSelecionado.getHabilidade().getNome() + " status: " + heroiSelecionado.getHabilidade().getValor());
                    heroiSelecionado.getHabilidade().restaurar();
                    System.out.println("Restauração realizada, status: " + heroiSelecionado.getHabilidade().getValor());
                    heroiSelecionado.getHabilidade().executar();
                }
            }
        });
        frame.setLocationRelativeTo(null);
        frame.setResizable(false);
        frame.setVisible(true);
        
    }
}


package gamer;

abstract class Heroi {
    private String nome;
    private Habilidade habilidade;
    private double poder;
    Heroi(Habilidade habilidade){
        this.nome = getClass().getSimpleName();
        this.habilidade = habilidade;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public double getPoder() {
        return poder;
    }

    public void setPoder(double poder) {
        this.poder = poder;
    }

    public Habilidade getHabilidade() {
        return habilidade;
    }
    
    public void setHabilidade(Habilidade habilidade) {
        this.habilidade = habilidade;
    }

    @Override
    public String toString() {
        return this.nome;
    }
}

package gamer;


class Hazuma extends Heroi{
    

    public Hazuma() {
        super(new Imortal());
    }
    
}


package gamer;


class Kahara extends Heroi{

    public Kahara() {
        super(new Velocidade());
    }
    
}

package gamer;

class Kamia extends Heroi{

    public Kamia() {
        super(new Voar());
    }
    
}

package gamer;


public abstract class Habilidade {
    
    double valor;
    final double restauracao;
    final double  valorMin;
    private String nome;

    public Habilidade(double valor, double restauracao) {
        this.valor = valor; 
        this.valorMin = valor/10;
        this.restauracao = restauracao;
        this.nome = getClass().getSimpleName();
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
    
    
    protected void restaurar(){
        valor+= restauracao;
    }
    
    protected void restaurar(double valor){
        if (this.valor < this.valorMin) {
            valor+= valor;
        }
    }
    public abstract boolean ativa();
    public abstract void executar();
    public double getValor(){
        return valor;
    }
}

package gamer;

public class Imortal extends Habilidade {

    public Imortal() {
        super(80, 20);
    }

    @Override
    public void executar() {
        if (ativa()) {
            System.out.println("Reviver");
        }
    }

    @Override
    public boolean ativa() {
        restaurar(1);
        return valor > 5;
    }

}

package gamer;

public class Velocidade extends Habilidade {

    public Velocidade() {
        super(20,5);
    }

    @Override
    public void executar() {
        if (ativa()) {
            System.out.println("More Fast");
        }
    }

    @Override
    public boolean ativa() {
        restaurar(1);
        return valor > 4;
    }

}

package gamer;

public class Voar extends Habilidade {

    public Voar() {
        super(300,15);
    }

    @Override
    public void executar() {
        if (ativa()) {
            System.out.println("Voando");
        }
    }

    @Override
    public boolean ativa() {
        restaurar(2);
        return valor > 15;
    }

}

Observe que pode ser criado um personagem que durante o jogo, pode assimilar uma habilidade de outro personagem, fazendo uso do seuHeroi.setHabilidade(novaHabilidade), ou ter uma arvore de habilidades a depender da sua arquitetura.