こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Radioボタンの割込み処理

毎度、お世話になります。
Radioボタンの割込み処理について、お教えください。
コード中の『se[0].addChangeListener(this)』にて、Radioボタンをクリックしますと
割込みが発生し、正常に動作します。
Q1)このthisを他のワードに変更できないでしょうか?
理由:他のプログラムで、thisと記述した瞬間に、エラーcheckに引っかかります。
nullの場合は、OKですが、割込みが発生しません。

以上、宜しくお願いします。

==============
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;


class JRadioButtonTestB extends JFrame implements ChangeListener {
JRadioButton se[]=new JRadioButton[2];
JLabel lb1, lb2;

JRadioButtonTestB() {
lb1 = new JLabel();
lb2 = new JLabel();

Container cont = getContentPane();
cont.setLayout(new BorderLayout());

//性別================================
se[0] = new JRadioButton("男性");
se[1] = new JRadioButton("女性");
se[0].addChangeListener(null); //<----問題点
se[1].addChangeListener(null); //
JPanel pSex = new JPanel();

pSex.setBackground(Color.cyan);
pSex.setLayout(new FlowLayout());
pSex.add(new JLabel("性別"));
pSex.add(se[0]);
pSex.add(se[1]);

ButtonGroup bgsex = new ButtonGroup();
bgsex.add(se[0]);
bgsex.add(se[1]);

JPanel kaku = new JPanel();
kaku.setBackground(Color.green);
kaku.setLayout(new GridLayout(3,2));

kaku.add(new JLabel("確認"));
kaku.add(new JLabel(" "));
kaku.add(new JLabel("性別"));
kaku.add(lb1);
cont.add("North",pSex);
cont.add("South",kaku);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("JRadioButtonTestB");
setSize(320, 200);
setVisible(true);
}
public void stateChanged(ChangeEvent e) {
if(se[0].isSelected()) lb1.setText("男性");
if(se[1].isSelected()) lb1.setText("女性");
}
public static void main(String[] args) {
new JRadioButtonTestB();
}
} //===

投稿日時 - 2015-01-29 11:39:29

QNo.8906831

困ってます

質問者が選んだベストアンサー

r_btn[i].addChangeListener(myDrawClass);

にしたら動きませんか?

投稿日時 - 2015-01-29 12:59:40

補足

maiko0318 さま
毎度、お世話になります。
下記の如く、クラス名として、myDrawClassとそれを継承しましたmyMsrCtlPanelを
引数として記述しましたが、eclipse4.4で、記述した(キーイン)段階でエラーとなります。

何か次のコメントを頂けますと、大変有難いです。

for(int i=0; i<=7; i++){
  // r_btn[i].addChangeListener(myDrawClass);
  r_btn[i].addChangeListener(myMsrCtlPanel);
}
以上

投稿日時 - 2015-01-29 13:30:35

お礼

maiko0318 さま
毎度、お世話になります。

その後、コードを見直しまして、『 implements ChangeListener 』が、ぬけていましたので、
追加しまして、旨く行きました。
度々のコメント有難うございました。

class myMsrCtlPanel extends myDrawClass implements ChangeListener {

以上

投稿日時 - 2015-01-29 17:16:10

このQ&Aは役に立ちましたか?

11人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

>引数として記述しましたが、eclipse4.4で、記述した(キーイン)段階でエラーとなります。

プログラムが複数にわたっているためかと思います。
このままコンパイルしたらどうなりますか?

投稿日時 - 2015-01-29 14:55:46

補足

maiko0318 さま

度々お世話になります。
>このままコンパイルしたらどうなりますか?
同じ箇所でコンパイルエラーになり、赤色のxマークが付きます。
myMsrCtlPane()を呼出していますのは、下記のMainFrameからです、
myMsrCtlPanelを実行している段階では、そのクラスはまだ出来上がっていないのでは
無いかと思います。
クラスが出来上がっていなくても、Buttonの割込み処理は出来ますが、
RadioButtonの割込は、クラスが確定しえないので、コンパイルエラーとなるのではないかと思っています。
もし、今回添付しました MainFrameのコードに不具合があれば、ご指摘ください。
以上、宜しくお願いします。
======================================
//MainFrame

public class MainFrame extends JFrame{
static myCanvas myCanvasX;
static myTablePanel myTable;
static myMsrChkPanel myMsrChk;
static myMsrCndPanel myMsrCnd;
static myMsrCtlPanel myMsrCtl;
static myDrawClass myDraw;//Test用
static MainFrame frame;

//コンストラクター
MainFrame(){
//================================================
//コンテントペイン作成
//=========================================
int myMsrCnd_xsize=myDraw.MSRCND_SIZE_X;//180;
int myMsrCnd_ysize=myDraw.MSRCND_SIZE_Y;//180;

int myTable_xsize=myDraw.TABLE_SIZE_X;//180;
int myTable_ysize=myDraw.TABLE_SIZE_Y;//180;

int myCanvas_xsize=myDraw.CANVAS_SIZE_X; //652; //512+140;
int myCanvas_ysize=myDraw.CANVAS_SIZE_Y;//600;


int myMsrChk_xsize=myDraw.MSRCHK_SIZE_X;//total_xsize;//180;
int myMsrChk_ysize=myDraw.MSRCHK_SIZE_Y;//180;

int myMsrCtl_xsize=myDraw.MSRCTL_SIZE_X;//total_xsize;
int myMsrCtl_ysize=myDraw.MSRCTL_SIZE_Y;

int total_xsize=myDraw.TOTAL_SIZE_X; //myMsrCnd_xsize+myTable_xsize+myCanvas_xsize;
int total_ysize=myDraw.TOTAL_SIZE_Y; //myMsrChk_ysize+myCanvas_ysize+myMsrCtl_ysize+100;

//フレーム作成
JFrame frame = new JFrame();
frame.setTitle("MainFrame");
//frame.setBounds(350,0,total_xsize,myCanvas_ysize+100);//desktop 位置、total_xsize,myCanvas_ysize+100
frame.setBounds(350,0,total_xsize,total_ysize);//desktop 位置、total_xsize,myCanvas_ysize+100
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(true);//false:サイズ変更の禁止
// frame.setVisible(true);

//WEST ====================================================
JPanel p3 = new JPanel();
myMsrCndPanel myMsrCnd=new myMsrCndPanel(p3, myMsrCnd_xsize, myMsrCnd_ysize); //widthx, widthy
frame.getContentPane().add(p3,BorderLayout.WEST);

//CENTER ======================================================
JPanel p4 = new JPanel();
myTable=new myTablePanel(p4, myTable_xsize, myTable_ysize);
frame.getContentPane().add(p4,BorderLayout.CENTER);

//EAST =======================================================
//GraphCanvas作成 <----GraphCanvasのコンストラクターをcallし、インスタンスを作成する
JPanel p1 = new JPanel();
myCanvasX= new myCanvas(myCanvas_xsize,myCanvas_ysize);

//myThread.myclsThreadX(myCanvas);

//p.setLayout(null);//引数:LayoutManager?
//p.setAlignmentX(0.0f);//あっても無くても良い, no effect
//p.setAlignmentY(40.0f);//あっても無くても良い, no effect
//p1.setBounds(0,0,400,300);//この命令は機能せず
p1.add(myCanvasX);
frame.getContentPane().add(p1,BorderLayout.EAST);

//NORTH ========================================================
//p2は、myCanvasの生成の後に、そのインスタンスを使用する。
JPanel p2 = new JPanel();
myMsrChkPanel myMsrChk=new myMsrChkPanel(p2, myMsrChk_xsize, myMsrChk_ysize);
frame.getContentPane().add(p2,BorderLayout.NORTH);

//SOUTH ====================================================
JPanel p5 = new JPanel();
myMsrCtl=new myMsrCtlPanel(p5, myMsrCtl_xsize, myMsrCtl_ysize);
frame.getContentPane().add(p5,BorderLayout.SOUTH);
//cls_PLR===================================================
myclsPLR clsPLR=new myclsPLR();

//フレーム可視化
frame.setVisible(true);//再描画が行われる
}

static myCanvas getmyCanvas(){
return myCanvasX;

}

static myMsrCtlPanel getmyMsrCtl(){
return myMsrCtl;

}

//main()メソッド
//=====================================
public static void main(String[] args){
//================================
frame=new MainFrame();
//myMsrCtl.setRadioButtonInterrupt(myMsrCtl); //myMsrCtlの中のメソッド:引数はクラス名

}

投稿日時 - 2015-01-29 15:47:43

ANo.1

ここはクラス名を指定します。
thisはこのクラスという意味です。

>他のプログラムで、thisと記述した瞬間に、エラーcheckに引っかかります。

そっちのプログラムを示してください。

投稿日時 - 2015-01-29 11:43:52

補足

>そっちのプログラムを示してください。
<--最初の部分です。 ご教授の程、宜しくお願いします。

最後の部分の『r_btn[i].addChangeListener(this);』のthisでエラーとなります。
=======================
import java.awt.Color;

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.LineBorder;
import javax.swing.event.ChangeEvent;
//=======================
//import javax.swing.JRadioButton;
//import javax.swing.event.ChangeEvent;

class myMsrCtlPanel extends myDrawClass{

Dimension dimension;
int ptrRD=0;
int ptrWR=0;
myDrawClass myDraw;//Test用
int nxx=10;
int nyy=10;
double delX=10.0;
double delY=10.0;
JRadioButton[] r_btn=new JRadioButton[8];
JCheckBox[] ckbox=new JCheckBox[4];

myMsrCtlPanel(JPanel p, int delx, int dely){
//領域のサイズ設定
setSize(delx,dely);
//領域のサイズ取得
dimension = getSize();

//p.setLayout(new GridLayout(3, 16));
//==================================
GridLayout layout = new GridLayout(3, 16);
layout.setHgap(2);
layout.setVgap(2);
p.setLayout(layout);
//================================
LineBorder border = new LineBorder(Color.BLACK, 1, true);

JButton button1=new JButton("btn1");modify_button(button1, border);

JButton button2=new JButton("btn2");modify_button(button2, border);
//===================================
JButton button3=new JButton("Sgl_srt");modify_button(button3, border);
//====================================
r_btn=new JRadioButton[8];

r_btn[0]=new JRadioButton("Idl"); r_btn[0].setBorderPainted(true); //button4
r_btn[1]=new JRadioButton("Frq"); r_btn[1].setBorderPainted(true); //button5
r_btn[2]=new JRadioButton("Plr"); r_btn[2].setBorderPainted(true); //button6
r_btn[3]=new JRadioButton("Buz");r_btn[3].setBorderPainted(true); //button7
r_btn[4]=new JRadioButton("Pls"); r_btn[4].setBorderPainted(true); //button8
r_btn[5]=new JRadioButton("THSF"); r_btn[5].setBorderPainted(true); //button9
r_btn[6]=new JRadioButton("THSQ"); r_btn[6].setBorderPainted(true); //button10
r_btn[7]=new JRadioButton("All"); r_btn[7].setBorderPainted(true); //button11
//========================
for(int i=0; i<=7; i++){
r_btn[i].addChangeListener(this);
}

// r_btn[0].addChangeListener(this);
//=========================
ButtonGroup group = new ButtonGroup();
group.add(r_btn[0]);//Idl
group.add(r_btn[1]);//Frq
以下、省略
以上

投稿日時 - 2015-01-29 12:20:30

あなたにオススメの質問