- PR -

JLabelを点滅させたいですが

1
投稿者投稿内容
coffeecat
会議室デビュー日: 2006/05/13
投稿数: 1
投稿日時: 2006-05-13 23:05
はじめまして。Javaのビギナーです。
標記の件について質問させていただきます。

JLabelを何回点滅させたいのですが、私のソースがなかなか実現できないです。

私のソースはプログラムが起動後、メーンメソッドにおいている点滅機能のメソッド(public void m() )がちゃんと作動できたが、ボタンのイベントハンドラーの中で、オブジェクトのjlabel2を点滅させることが出来なかったのです。

ソースは以下の通りです。分かる方、ご教授をお願いいたします。

public class BlingTest extends JFrame{
public static JFrame jframe;
public static JPanel jpanel;
public static JButton jbutton;
public static JLabel jlabel, jlabel2;
public ButtonEventHandler buttonEventHandler;

/**
* @param args
*/
public static void main(String[] args) {

boolean b = true;
BlingTest blingTest = new BlingTest();
blingTest.init();
/**** ここのソースきちんと作動できる ******/
for(int i=0; i<5; i++){
System.out.println(i);
if(b){
jlabel.setBackground(Color.red);
b = false;
}else{
jlabel.setBackground(Color.green);
b = true;
}
try{
Thread.sleep(500);
}catch(Exception e){}
}

}

public void init(){
jframe = new JFrame();
jpanel = new JPanel();
jbutton = new JButton("Click");
buttonEventHandler = new ButtonEventHandler(this);
jbutton.addActionListener(buttonEventHandler);
jlabel = new JLabel("111");
jlabel2 = new JLabel("222");
jlabel.setOpaque(true);
jlabel2.setOpaque(true);
jpanel.add(jlabel);
jpanel.add(jlabel2);
jpanel.add(jbutton);


jframe.getContentPane().add(jpanel);
jframe.pack();
jframe.setVisible(true);

}

public void method1() {
for(int i=0; i<10; i++){
int k = i;
n(k);
method4();
i = k + 1;
}
}
public void method2(){
// do something
}
public void method3(){
// do something
}
public void method4(){
// do something
}
public void n(int k){
//....do something
// ここは点滅機能のメソッド
m(true);
//....do something
}
public void m(boolean b){
for(int i=0; i<5; i++){
System.out.println(i);
if(b){
jlabel2.setBackground(Color.red);
b = false;
}else{
jlabel2.setBackground(Color.green);
b = true;
}
try{
Thread.sleep(500);
}catch(Exception e){}
}
}

}
class ButtonEventHandler implements ActionListener{
BlingTest blingTest;
ButtonEventHandler(BlingTest blingTest){
this.blingTest = blingTest;
}
public void actionPerformed(ActionEvent ae) {
// このメソッドの中で点滅メソッドをコール
blingTest.method1();
System.out.println("The button is clicked, and the label is blinked.");
blingTest.method2();
blingTest.method3();
}
}

くれよん
ベテラン
会議室デビュー日: 2005/04/28
投稿数: 74
投稿日時: 2006-05-14 12:33
こんにちわ。
もの凄く妙な(?)感じがしますが、動きます。

コード:
public class BlingTest extends JFrame implements ActionListener{
	 public static JFrame jframe;
	 public static JPanel jpanel;
	 public static JButton jbutton;
	 public static JLabel jlabel, jlabel2;
	 public ButtonEventHandler buttonEventHandler;

	 /**
	 * @param args
	 */
	 public static void main(String[] args) {
		 boolean b = true;
		 BlingTest blingTest = new BlingTest();
		 blingTest.init();
		 /**** ここのソースきちんと作動できる ******/
		 for(int i=0; i<5; i++){
			 System.out.println(i);
			 if(b){
				 jlabel.setBackground(Color.red);
				 b = false;
			 }else{
				 jlabel.setBackground(Color.green);
				 b = true;
			 }
		 try{
			 Thread.sleep(500);
		 }catch(Exception e){}
		 }

	 }

	 public void init(){
		 jframe = new JFrame();
		 jpanel = new JPanel();
		 jbutton = new JButton("Click");
		 buttonEventHandler = new ButtonEventHandler(this);
		 jbutton.addActionListener(buttonEventHandler);
		 jlabel = new JLabel("111");
		 jlabel2 = new JLabel("222");
		 jlabel.setOpaque(true);
		 jlabel2.setOpaque(true);
		 jpanel.add(jlabel);
		 jpanel.add(jlabel2);
		 jpanel.add(jbutton);
	
	
		 jframe.getContentPane().add(jpanel);
		 jframe.pack();
		 jframe.setVisible(true);

	 }

	 public void method1() {
		 for(int i=0; i<10; i++){
			 int k = i;
			 n(k);
			 method4();
			 i = k + 1;
		 }
	 }
	 
	 public void method2(){
//	  do something
	 }
	 
	 public void method3(){
//	  do something
	 }
	 
	 public void method4(){
//	  do something
	 }
	 
	 public void n(int k){
		 //	 ....do something
		 //	  ここは点滅機能のメソッド
		 m(true);
		 //	 ....do something
	 }

	 public void m(boolean b){
		 for(int i=0; i<5; i++){
			 System.out.println(i);
			 if(b){
				 jlabel2.setBackground(Color.red);

				 jlabel2.update(jlabel2.getGraphics());
				 b = false;
			 }else{
				 jlabel2.setBackground(Color.green);
				 jlabel2.update(jlabel2.getGraphics());
				 b = true;
			 }
			 try{
				 Thread.sleep(500);
			 }catch(Exception e){}
		 }
	 }

	 public void actionPerformed(ActionEvent ae) {
		 //このメソッドの中で点滅メソッドをコール
		 method1();
		 System.out.println("The button is clicked, and the label is blinked.");
		 method2();
		 method3();
	} 
	 
}

 class ButtonEventHandler implements ActionListener{
	 BlingTest blingTest;
	 ButtonEventHandler(BlingTest blingTest){
		 this.blingTest = blingTest;
	 }

	 public void actionPerformed(ActionEvent ae) {
		 //このメソッドの中で点滅メソッドをコール
		 blingTest.method1();
		 System.out.println("The button is clicked, and the label is blinked.");
		 blingTest.method2();
		 blingTest.method3();
	} 
}


1

スキルアップ/キャリアアップ(JOB@IT)