2017-09-18 7 views
0

나는 3 개의 라디오 버튼을 사용하여 카운터에 대한 3 개의 증분 값 사이에서 전환하는 프로그램을 가지고 있습니다. 여기서는 time입니다. 라디오 버튼을 눌렀을 때 status을 변경하려고합니다. 내가 한 번 CHANGE Slow을 인쇄 버튼 slow을 누르면 프로그램 등변수 덮어 쓰지 않음 변수

0 
Normal 
2 
Normal 
4 
Normal 
6 

인쇄를 계속합니다 시작하지만 계속 여전히 2으로 증가하고 때 Normal 때마다 인쇄합니다. status에 대해 다른 값으로 영구히 전환하고 또 다른 라디오 버튼을 다시 선택할 때까지 다른 증분으로 어떻게 전환 할 수 있습니까?

package daynightcycle; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 
import static javax.swing.JFrame.EXIT_ON_CLOSE; 

/** 
* Day/night cycle with visuals. Adjustable speed and time inserts. 
* Optional date or daycounter later 
* @author rogie 
*/ 
public class DayNightCycle extends JFrame implements Runnable{ 

    //JFrame entities 
    private JPanel animationPanel; 
    public JRadioButton button; 
    public JRadioButton button2; 
    public JRadioButton button3; 
    public int time = 0; 
    public String status = "Normal"; 


    public static void main(String[] args) { 
     DayNightCycle frame = new DayNightCycle(); 
     frame.setSize(2000, 1300); 
     frame.setLocation(1000,350); 
     frame.createGUI(); 
     frame.setVisible(true); 
     frame.setTitle("Day/Night Cycle, Rogier"); 
     (new Thread(new DayNightCycle())).start(); 
    } 

    private void createGUI() { 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    Container window = getContentPane(); 
    window.setLayout(new FlowLayout()); 
    animationPanel = new JPanel(); 
    animationPanel.setPreferredSize(new Dimension(2000, 900)); 
    animationPanel.setBackground(Color.black); 
    window.add(animationPanel); 
    JRadioButton option1 = new JRadioButton("Slow"); 
    JRadioButton option2 = new JRadioButton("Normal", true); 
    JRadioButton option3 = new JRadioButton("Fast"); 
    option1.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent event) { 
      System.out.println("CHANGE"); 
      status = "Slow"; 
      System.out.println(status); 
     } 
    }); 
    option2.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent event) { 
      status = "Normal"; 
     } 
    }); 
    option2.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent event) { 
      status = "Fast"; 
     } 
    }); 

    //option2.setFont(new java.awt.Font("Tahoma", Font.BOLD, 30)); 
    //option2.putClientProperty("JComponent.sizeVariant", "huge"); //doesn't work 

    ButtonGroup group = new ButtonGroup(); 
    group.add(option1); 
    group.add(option2); 
    group.add(option3); 
    add(option1); 
    add(option2); 
    add(option3); 

     pack(); 
    } 

    public void run() { 

     while(true){ 
      System.out.println(time); 
      System.out.println(status); 
      try  
      { 
       Thread.sleep(500); 
       if (status.equals("Slow")) { 
        time += 1; 
       } 
       else if (status.equals("Normal")){ 
        time += 2; 
       } 
       else { 
        time += 3; 
       } 
      } 
       catch(InterruptedException ex) 
      { 
       Thread.currentThread().interrupt(); 
      } 

     } 
    } 
} 
+1

에 선

(new Thread(new DayNightCycle())).start(); 

또한 오타가 : 당신은 옵션 2 두 ActionListener를 추가 .... 주목 – JensS

+0

그래,하지만 감사합니다! – RnRoger

답변

2

DayNightCycle -Objects를 생성 중입니다. 첫 번째는 GUI를 표시하고 두 번째는 콘솔에 인쇄합니다.

변경

(new Thread(frame)).start(); 
1
public static void main(String[] args) { 
    final DayNightCycle frame = new DayNightCycle(); 
    frame.setSize(2000, 1300); 
    frame.setLocation(1000,350); 
    frame.createGUI(); 
    frame.setTitle("Day/Night Cycle, Rogier"); 

그리고

EventQueue.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      frame.setVisible(true); 
     } 
    }); 

또는 Java 8 : 두 번째 DayNightCycle을 만들어

EventQueue.invokeLater(() -> frame.setVisible(true)); 

} 

당신 효과

.

관련 문제