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.