2017-04-30 6 views
1

마우스 오른쪽 버튼을 선택하고 JRadio Frame에서 "ok"를 클릭하면 변수 "name"의 값을 변경하고 싶습니다.JRadioButton에서 가치 얻기

예를 들어 r1을 선택하고 "ok"를 누르면 전체 패키지에서 이름 == "빠름"을 갖고 싶습니다.

package Snake; 
public class Radio extends JFrame { 
    private int delay = 100; 
    private String name; 
    JTextField t1; 
    JButton b; 
    JRadioButton r1, r2; 
    JLabel l; 

    public void selectSpeed() { 

     b = new JButton("Ok"); 
     r1 = new JRadioButton("Fast"); 
     r2 = new JRadioButton("Slow"); 
     l = new JLabel("Speed: "); 

     ButtonGroup bg = new ButtonGroup(); 
     bg.add(r1); 
     bg.add(r2); 
     add(b); 
     add(r1); 
     add(r2); 
     add(l); 

     b.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent arg0) { 

       if (r1.isSelected()) { 
        name = "Fast"; 
       } else { 
        name = "Slow"; 
       } 
       l.setText("Speed: " + name); // name=="Fast" when r1 is selected 
      } // name=="Slow" when r2 is selected 
     }); 
     if (name == "Fast") { // and now name is empty... 
      delay = 50; 

     } 
     if (name == "Slow") { 
      delay = 500; 
     } 

     setLayout(new FlowLayout()); 
     setSize(400, 400); 
     setVisible(true); 
    } 

    public int setSpeed() { 
     selectSpeed(); 
     return delay; 

    } 

} 
+4

가능한 중복 http://stackoverflow.com/questions/ 513832/how-do-i-compare-strings-in-java) –

답변

0

JRadioButton 수신기에서이 작업을 수행해야합니다. 예를 들어, 다음과 같이, 처음에 당신이 변수 "이름"을 변경하고 나중에 현재 리스너 당신이 조건을 확인하지만, 당신이 사용해야하는 문자열을 비교하는 것을 기억해야합니다 "같다"

b.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      if (r1.isSelected()) { 
       name = "Fast"; 
      } else { 
       name = "Slow"; 
      } 
      l.setText("Speed: " + name); // name=="Fast" when r1 is selected 

      if (name.equals("Fast")) { // and now name is empty... 
       delay = 50; 

      } 
      if (name.equals("Slow")) { 
       delay = 500; 
      } 
     } // name=="Slow" when r2 is selected 
    }); 
0

하는 경우 에 delay을 변경하려면 delay을 변경하기 위해 작성한 코드가 한 번만 실행되고 프로그램 실행이 시작될 때 해당 코드가 실행되기 때문에 ActionListener에 논리를 작성해야합니다. name은 비어 있습니다.

버튼을 클릭하면 ActionListener 만 실행되므로 언제든지 delay은 변경되지 않습니다. 그리고 당신이 만들고있는 다른 실수는 잘못된 방식으로 문자열을 비교하고 있다는 것입니다. 더 자세한 정보는 How do I compare Strings in Java?

버튼 클릭시 동적으로 변경하려면 ActionListener에서 변경해야합니다.

b.addActionListener(new ActionListener() { 

    public void actionPerformed(ActionEvent arg0) { 

     if (r1.isSelected()) { 
      name = "Fast"; 
      delay = 50; 
     } else { 
      name = "Slow"; 
      delay = 500; 
     } 
     l.setText("Speed: " + name); // name=="Fast" when r1 is selected 
    } // name=="Slow" when r2 is selected 
}); 
0

글쎄, 내 실수를 참조하십시오, 감사합니다.

하지만 여전히 내가 좋아하는 방식으로 작동하지 않습니다. JRadio에서 오른쪽 버튼을 선택하고 "ok"를 칠 때마다 "지연"값을 변경하고 싶습니다.이 값을 변경하면 다른 클래스에 가고 싶습니다. 나는 "지연"의 값을 필요로하는 클래스의 코드가있다

:

package Snake; 
public class Gameplay extends Paint implements KeyListener, ActionListener { 
private Timer timer; 
private int q = 0; 
Radio radio = new Radio(); 


public Gameplay() { 

    addKeyListener(this); 
    setFocusable(true); 
    setFocusTraversalKeysEnabled(false); 
    timer = new Timer(radio.selectSpeed(), this); //here i need flexible "delay" value 
    timer.start(); 
} 
[? 내가 자바에서 문자열을 비교하려면 어떻게] (의