2016-12-05 6 views
2

를 사용하여, 그래서 게임이 진행됨에 따라 수동으로 막대가 최대 값을 설정하려는 경우 값을 업데이트. 이 게임은 포켓몬 게임이며 새로운 포켓몬을 소환 할 수 있습니다. 이 새로운 포켓몬은 다른 최대 건강 수치와 현재 건강 수치를 가질 수 있습니다. 그 이유는 progressBar.setMaximum(newPokemonMaxHealth)progressBar.setValue(currentPokemonHealth)입니다. 심지어 progressBar.repaint(), progressBar.revalidate()progressBar.update(progressBar.getGraphics()으로 전화를 걸 었으며 그 중 아무 것도 나를 위해 일하지 않았습니다. 나는 현재의 건강과 최대 건강의 값을 인쇄JProgressBar가하지의 setValue (NEWVALUE) 나는 건강 줄로 <code>JProgressBar</code> 사용하고

  board.getTrainer1().pokemonChanged(1); 
      poke1Health.setValue(board.getTrainer1().getPokemon(0).getCurrentHealth()); 
      poke1Health.setMaximum(board.getTrainer1().getPokemon(0).getMaxHealth()); 
      poke1Health.repaint(); 
      poke1Health.revalidate(); 
      poke1Health.update(poke1Health.getGraphics()); 

: 나는 최대 값을 변경하려고 할 때 다음

UIManager.put("ProgressBar.selectionForeground", Color.BLACK); 
    poke1Health = new JProgressBar(0); 
    poke1Health.setMaximum(board.getTrainer1().getBattlingPokemon().getMaxHealth()); 
    poke1Health.setValue(board.getTrainer1().getBattlingPokemon().getCurrentHealth()); 

    poke1Health.setStringPainted(true); 
    poke1Health.setForeground(Color.green); 
    poke1Health.setBackground(Color.red); 
    poke1Health.setPreferredSize(new Dimension(50, 10)); 
    centerPanel1.add(poke1Health); 

: 여기

진행 표시 줄의 초기화이다 다른 포켓몬의 가치는 가치있는 것이 었습니다.

막대 값은 바뀌지 않는 것으로 보이지만 최대 값은 바꿉니다.

새로운 포켓몬의 건강이 이전 포켓몬 건강보다 높은 경우,이 값을 업데이트하지 않습니다. 새로운 포켓몬의 체력이 이전 포켓몬의 체력보다 낮 으면 값을 업데이트합니다. 문제는 없습니다. 여기에 내가 인쇄 것입니다 :

포켓몬 1 최대 건강 : 49

포켓몬이 최대 건강 : 50

포켓몬 1 개 현재 건강 : 49

포켓몬이 현재 건강 : 50

그런 다음 새로운 최대 값과 새 값을 설정하기 전과 후에 막대 값을 인쇄했습니다.

바 값 전에 49

바 값 후 49

바 최대 전 : 49

바 최대 후 : 어떤 이유 50

최대치 변경되었지만 값은 변경되지 않습니다. 포켓몬 2의 현재 건강을 얻으려고 한 프린트는 바의 새로운 값을 설정하려고했던 정확한 코드입니다. 여기 :

poke1Health.setValue(board.getTrainer1().getBattlingPokemon().getCurrentHealth()); 

System.out.println("Pokemon 2 Current Health: " + board.getTrainer1().getBattlingPokemon().getCurrentHealth()); 

도와주세요! 진행률 표시 줄 값을 업데이트하고 싶지 않은 이유를 알 수 없습니다.

감사합니다.

+1

귀하의 질문에 [mcve] 코드를 게시하면 문제를 잘 보여주는 작은 컴파일 가능한 실행 가능한 예제 프로그램을 작성하는 것이 좋습니다. 이것은 전체 프로그램이 아니며 다시 크지는 않지만 작고 코드 형식의 텍스트로 게시 할 수있을만큼 작습니다. 다시 말하지만 실행은 - 주요 방법을 가지고 있으며, 수입과 컴파일에 필요한 모든 것이 있습니다. –

+0

실제 코드는 매우 큽니다! 나는 이것을 시도했다 : 'import java.awt.FlowLayout; import javax.swing.JProgressBar; 공용 클래스 JProgressBarError { \t 공공 정적 무효 메인 (문자열 인수 []) { \t \t \t JProgressBar가 막대 = 새로운 JProgressBar가 (0, 10); \t \t bar.setValue (10); \t \t System.out.println (bar.getValue()); \t \t System.out.println (bar.getMaximum()); \t \t bar.setMaximum (20); \t \t bar.setValue (20); \t \t System.out.println (bar.getValue()); \t \t System.out.println (bar.getMaximum()); \t } 이것은 효과가 있었지만 값을 변경할 수 있었지만 어떤 이유로 그것이 내 코드에서 작동하지 않습니다! – Cole

+0

나는 코멘트에서 새로운 라인으로가는 방법을 모른다! !!!! :( – Cole

답변

0
import java.awt.FlowLayout; 
import javax.swing.JProgressBar; 

public class JProgressBarError { 
    public static void main(String args[]) { 
     JProgressBar bar = new JProgressBar(0, 10); 
     bar.setValue(4); 
     System.out.println(bar.getValue()); 
     System.out.println(bar.getMaximum()); 
     bar.setMaximum(20); 
     bar.setValue(17); 
     System.out.println(bar.getValue()); 
     System.out.println(bar.getMaximum()); 
    } 
} 

주석에 예제를 복사했는데 모든 것이 작동합니다. 이 최소 예제부터 시작하면 문제가 없음을 알아야합니다. 구성 요소의 색상이 원인 일 수 있습니까? 다시 말하지만, 원자 예제부터 시작하는 것이 좋습니다.

+0

감사합니다. 위의 문제에 대한 답변을 게시했습니다. – Cole

1

새 값이 막대 최대 값보다 높으면 새 값이 설정되지 않습니다. 먼저 최대 값을 업데이트 한 다음 최대 값과 같거나 낮은 새 값을 설정해야합니다. 대신 setValue 앞에 setMaximum을 넣고 모든 것이 작동했습니다!