1

ここでは、ボタンが押されたときにアクションを実行したかったのですが、非常に簡単ですが、主な問題は、拡張された JPanel 内で実行することです。その特定のボタンにアクションリスナーを追加してactionperformedイベントを呼び出すような簡単な解決策があるかもしれませんが、私の場合はそうではありません.4つのボタン(t1、t2、t3、t4)があります。イベント ae (コードのセグメントを見てください)。そして後で、actionlistener および actionperformed イベントを呼び出す別の JButton の tr および rf を呼び出すコードを見ることができます。

明確に理解できるように、コードを一目見ることができます...

 class Tracker extends JPanel
{

public static void main(String[] args) {
    new Tracker();    }

public Tracker()
{

JButton tr=new JButton("TRACKER APPLET");
tr.setBounds(720,170,100,20);

JButton rf=new JButton("REFRESH");
rf.setBounds(200,170,100,20);

boolean tc1=false,tc2=false,tc3=false,tc4=false;

JButton t1=new JButton(" ");
t1.addActionListener(this);
JButton t2=new JButton(" ");
t2.addActionListener(this);
JButton t3=new JButton(" ");
t3.addActionListener(this);
JButton t4=new JButton(" ");
t4.addActionListener(this);


public void actionPerformed(ActionEvent ae)
{
    if(ae.getSource()==t1)
    {
            tc1=true;
    }
    if(ae.getSource()==t2)
    {
            tc2=true;
    }
    if(ae.getSource()==t3)
    {
            tc3=true;
    }
    if(ae.getSource()==t4)
    {
            tc4=true;
    }

}


tr.addActionListener(new ActionListener(){
 public void actionPerformed(ActionEvent e){

    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (ClassNotFoundException ex){}
            catch(InstantiationException ex){}
            catch(IllegalAccessException ex){}
            catch(UnsupportedLookAndFeelException ex) {}

                //some food here....


                           }
                        });
            }
             });        

    rf.addActionListener(new ActionListener(){
 public void actionPerformed(ActionEvent e){

    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run()
        {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } 
            catch (ClassNotFoundException ex){}
            catch(InstantiationException ex){}
            catch(IllegalAccessException ex){}
            catch(UnsupportedLookAndFeelException ex) {}
                         //some extra work runs here...
        }
    });
 }
    });
add(tr);
add(rf);
add(t1);
add(t2);
add(t3);
add(t4);
}

ここでの問題は、すでに JPanel を拡張しているメイン クラスとして ActionListener を実装できなかったことです。私はちょうどJbuttonsで仕事をしようとしている::ボタン(t1 | t2 | t3 | t4)とJButtons(tr | rf)が時系列で押されたときに単一のアクションを実行したかった..

前もって感謝します..

4

1 に答える 1

1
class Tracker extends JPanel implements ActionListener

あなたのコードはメソッドにいくつかのメソッドを含んでいます...

このコードは機能します:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Tracker extends JPanel implements ActionListener {
   public Tracker() {
      tr.setBounds( 720, 170, 100, 20 );
      tr.addActionListener( this );

      rf.setBounds( 200, 170, 100, 20 );
      rf.addActionListener( this );

      t1.addActionListener( this );
      t2.addActionListener( this );
      t3.addActionListener( this );
      t4.addActionListener( this );
      add(tr);
      add(rf);
      add(t1);
      add(t2);
      add(t3);
      add(t4);
   }

   @Override
   public void actionPerformed( ActionEvent e ) {
      Object src = e.getSource();
      if( src == t1 ) {
         tc1 = true;
      }
      else if( src == t2 ) {
         tc2 = true;
      }
      else if( src == t3 ) {
         tc3 = true;
      }
      else if( src == t4 ) {
         tc4 = true;
      }
      else if( src == tr ) {

      }
      else if( src == rf ) {

      }
   }

   private final JButton tr = new JButton( "TRACKER APPLET" );
   private final JButton rf = new JButton( "REFRESH" );
   private final JButton t1 = new JButton( " " );
   private final JButton t2 = new JButton( " " );
   private final JButton t3 = new JButton( " " );
   private final JButton t4 = new JButton( " " );
   boolean tc1 = false, tc2 = false, tc3 = false, tc4 = false;

   public static void main( String[] args ) {
      JFrame frame = new JFrame( "" );
      frame.add( new Tracker());
      frame.pack();
      frame.setLocationRelativeTo( null );
      frame.setVisible( true );
   }
}
于 2013-02-16T07:54:14.480 に答える