2014-04-24 2 views
3

나는 버튼을 클릭 할 때 동작을 시도하고 있지만, JCheckBox이 선택되었는지 확인해야합니다.Jcheckbox 상태에 대해서, java

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseMotionListener; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import java.util.*; 

import javax.swing.*; 

public class RandomPassword extends JFrame{ 
RandomPassword(String s){ 
    super(s); 
    setSize(300,300); 
    setVisible(true); 
    addWindowListener(new WindowAdapter(){ 
     public void windowClosing(WindowEvent ev){ 
      System.exit(0); 

     } 
    }); 
    setLayout(null); 
    setFont(new Font("Serif", Font.PLAIN, 20)); 
    Label l1 = new Label("Введите количество символов:"); 
    l1.setBounds(50, 100, 200, 30); 
    add(l1); 
    JTextField tf1 = new JTextField(1002); 
    tf1.setBounds(50,130,200,30); 
    add(tf1); 
    JTextArea ta1 = new JTextArea(); 
    ta1.setPreferredSize(new Dimension(150,30)); 
    ta1.setBounds(50,210,230,30); 
    add(ta1); 
    JCheckBox ch1 = new JCheckBox("Использовать заглавные буквы"); 
    ch1.setBounds(50, 0, 200, 30); 
    add(ch1); 
    JCheckBox ch2 = new JCheckBox("Использовать цифры"); 
    ch2.setBounds(50, 30, 200, 30); 
    add(ch2); 
    JCheckBox ch3 = new JCheckBox("Использовать спецсимволы"); 
    ch3.setBounds(50, 60, 200, 30); 
    add(ch3); 
    JButton b1 = new JButton("Сгенерировать"); 
    b1.setBounds(75, 170, 150, 30); 
    add(b1); 
    b1.addActionListener(new Action()); 


} 


public static void main(String[] args){ 
    new RandomPassword("Генератор случайных паролей"); 


} 
static class Action implements ActionListener{ 
     public void actionPerformed(ActionEvent e){ 



     } 
} 

}

나는 정적 클래스 액션의 체크 박스를 만들고 싶어하지만, 그는 나에게 exception을 던지고있다. 나는 무엇을해야합니까?
이 시도는 나에게 도움이되지 못했습니다.

JButton b1 = new JButton(new AbstractAction("Сгенерировать") { 

     public void actionPerformed(ActionEvent e) { 
      ch1.isSelected(); 
     } 
    }); 
+0

좀 더 구체적으로 알려주시겠습니까? 어떤 종류의 예외가 있습니까? 문제는 당신이 만드는 체크 박스가 액션 리스너의 범위에 있지 않다는 것 같습니다. 생성자의 내부 클래스를 사용해보십시오. –

+0

네, 행동 청취자의 범위 문제라고 생각합니다. 내게 수업을 작성하도록 도와 줄 수 있습니까? – Genessis

+0

마지막으로 ch1, ch2 및 ch3과 함께 final을 사용해야합니다. 내부 클래스에 대한 도움이 필요하시면 타이 – Genessis

답변

0

당신은 함께 cliked JCheckBox에에 액세스 할 수 있습니다

((JCheckBox)e.getSource()) 
+0

이렇게하면 액션 리스너를 버튼이 아닌 체크 박스에 연결해야합니다. –

0

당신의 프로그램이 확인란을 구조화되는 방법은 actionPerformed 방법의 범위에 있지 않습니다. 이 문제를 해결하는 한 가지 방법은 생성자에서 직접 익명의 내부 클래스를 사용하는 것입니다.

final JCheckBox ch3 = new JCheckBox("Использовать спецсимволы"); 
... 
b1.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e){ 
     System.out.println(ch3.isSelected()); 
    }}); 

이 방법은 당신이이 내부 클래스에 액세스 할 수 있도록 체크 박스 변수 final을해야합니다. 그런 다음 isSelected 메서드를 사용하여이 확인란이 현재 선택되어 있는지 확인할 수 있습니다.

관련없는 참고로 생성자의 끝에 setVisible(true)으로 전화를 걸면 좋으며, 그렇지 않으면 일부 GUI 요소가 올바르게 그려지지 않은 것처럼 보입니다.

+0

그래, 마침내 이것, 감사합니다! – Genessis