0

ここでは、実行時にチェックボックスを使用していくつかのJComponentを無効化/有効化することにほとんど問題がありません。私はやろうとしましif(checkbox.isSelected(){} たが、うまくいきませんでした。追加しようとするとaddActionListener(this)、「クラスAbstractButtonのメソッドaddActionListinerを特定のタイプに適用できません:必須アクションlistiner:JudgeMain(そのクラス名)が見つかりました-コンストラクターで「this」をリークします」というエラーが発生します

public class JudgeMain extends JFrame {
Connection conn = null;
ResultSet rs = null;
PreparedStatement pst = null;
LogInJ id = new LogInJ();
public String IdNumber;
public JudgeMain(LogInJ id) 
{
    initComponents();
    ButtonGroup();
    this.id = id;
    initDetails();
    yesCB.addActionListener(this);
    if(yesCB.isSelected())
    {
        timeF.setEnabled(true);
        catF.setEnabled(true);
        yearsCB.setEnabled(true);
        monthsCB.setEnabled(true);            
    }
}

よろしくお願いします

4

3 に答える 3

2

クラスJudgeMainはタイプを表しませんActionListener

呼び出しを可能にするには、このインターフェイスを実装する必要があります

yesCB.addActionListener(this);

または、匿名リスナーを使用するだけです(注、ソースを確認する必要はありません)。

yesCB.addActionListener(new ActionListener() {

   @Override
   public void actionPerformed(ActionEvent e) {
      timeF.setEnabled(yesCB.isSelected());
      catF.setEnabled(yesCB.isSelected());
      yearsCB.setEnabled(yesCB.isSelected());
      monthsCB.setEnabled(yesCB.isSelected());
}});

補足:推奨されるアプローチはJFrame、クラスをサブクラス化するのではなく、インスタンスを作成して直接使用することです。

于 2013-01-17T16:42:44.903 に答える
1

クラスは以下を実装する必要がありますActionListener

このようなものは機能するはずです(ただし、元のコードがコンパイルされなかったため、確信が持てません):

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.swing.JFrame;

public class JudgeMain extends JFrame implements ActionListener {
    Connection conn = null;
    ResultSet rs = null;
    PreparedStatement pst = null;
    LogInJ id = new LogInJ();
    public String IdNumber;

    public JudgeMain(LogInJ id) {
        initComponents();
        ButtonGroup();
        this.id = id;
        initDetails();
        yesCB.addActionListener(this);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (yesCB == e.getSource()) {
            timeF.setEnabled(yesCB.isSelected());
            catF.setEnabled(yesCB.isSelected());
            yearsCB.setEnabled(yesCB.isSelected());
            monthsCB.setEnabled(yesCB.isSelected());
        }
    }
}
于 2013-01-17T16:44:07.107 に答える
-1

必要に応じて、ActionListenerの代わりにJCheckBoxでChangeListenerを使用できます。

于 2013-01-17T16:54:16.483 に答える