2012-01-02 16 views
0

[OK]を、私は、Javaを学び始め、これは私のPCActionListenerのイベントは、Javaで

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class form2 
{ 
    public static void main(String args[]) 
    { 
     // Create Frame 1 
     JFrame frame = new JFrame("Frame 1"); 
     frame.setSize(333,333); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     // Create panel 
     JPanel panel = new JPanel(); 

     // Create button 
     JButton button = new JButton("Press me!"); 

     // Add things 
     panel.add(button); 
     frame.add(panel); 
     frame.setVisible(true); 

     // Add the action listener to that button 
     button.addActionListener(new action()); 

     static class action implements ActionListener 
     { 
      public void actionPerformed (ActionEvent e) 
      { 
       // Create Frame 2 
       JFrame frame2 = new JFrame("Frame 2"); 
       frame2.setSize(200,200); 
       frame2.setVisible(true); 
       frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       JLabel label = new JLabel("Clicked!"); 
       JPanel panel2 = new JPanel(); 

       // First add to frame2 the panel just create 
       frame2.add(panel2); 

       // Add to panel the label 
       panel2.add(label); 
      } 
     } 

    } 

} 

に取り組み、それがアクションについて私にエラーを与え、i「はドンしないインターネットからのコードです理由を理解できない。

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
action cannot be resolved to a type 
Illegal modifier for the local class action; only abstract or final is permitted 

at form2.main(form2.java:26) 

私の問題は何ですか?その男のコンピューター上の誰も私を助けることができる

http://www.youtube.com/watch?v=jEXxaPQ_fQo&feature=channel_video_title

に動作します?

+0

Javaの命名規則を学び、それらに固執してください – kleopatra

答えて

4

あなたがしてはいけないメソッドの中で静的クラスを宣言しています。だから、メソッドの外にそれを取る、またはより良い、それ匿名内部クラスます

button.addActionListener(new ActionListener() { 

    public void actionPerformed(ActionEvent e) { 
     // Create Frame 2 
     JFrame frame2 = new JFrame("Frame 2"); 
     frame2.setSize(200, 200); 
     frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JLabel label = new JLabel("Clicked!"); 
     JPanel panel2 = new JPanel(); 

     // First add to frame2 the panel just create 
     frame2.add(panel2); 

     // Add to panel the label 
     panel2.add(label); 
     frame2.setVisible(true); 
    } 
    }); 

この質問は道によるJavaの-EEとしなければならない何?

+0

ああ、私はところで...そのため申し訳ありませんが、私はそれがsomeware置く必要がありますか?私は理解していない... – Master345

+0

匿名の内部クラスの+1! – whirlwin

+0

@RowMinds:上記の編集を参照してください。 –

2

メソッド内で静的クラスを定義することはできません。クラス定義static class .... { }をメインメソッドの外に移動します。また、クラスを大文字で開始することをお勧めします(例:AddPanelAction)。

+0

静的でない場合、Javaのクラスはメソッド内で定義できます。 – Lion

+0

ありがとう、しかし、私は少し質問がある、なぜ私はframe2.setVisible(真);テキスト2を見るためにframe2の終わりに???その男のビデオでは、彼はそれを多くの上に置いた、私のコンピュータでそれは最後の行にする必要があります... – Master345

+0

私はヒントのために、答えを訂正しました。 – Matt

2

メソッド内にクラスを宣言します。この場合はmainですが、動画の中の男のように、クラスの外側にある必要があります。

希望に役立ちます!

+0

ok、ありがとう、それは私の間違いだった、私はそれを見たdiden't、私はもっと将来クラスで働く必要があります申し訳ありません – Master345

+0

ありがとう、しかし、私は少し質問を持って、なぜ私はframe2.setVisible );テキスト2を見るためにframe2の終わりに???その男のビデオでは、彼は私のコンピュータで、それは最後の行でなければならない多くの上に置いた... – Master345

1

メソッド内で静的クラスを定義することはできません。そのクラスをmainメソッドの外に移動するか、必要に応じてmainメソッド内でクラスを静的でないと宣言します。静的クラスは、常に1つの外部非静的クラスを必要とします。

+1

ありがとう、しかし、私は少しの質問がある、なぜ私はframe2.setVisible(真);テキスト2を見るためにframe2の終わりに???その男のビデオでは、彼はそれを多くの上に置いた、私のコンピュータでそれは最後の行にする必要があります... – Master345

+0

それから、どこに配置したいですか?すべてのコンポーネントを追加せずにレンダリングしたり、問題が発生する可能性があります。 – Lion

1

のActionListenerクラスは、このようなmainメソッドの外で宣言する必要があります。

import javax.swing.*; 
import java.awt.event.*; 

public class Main 
{ 
    public static void main(String args[]) 
    { 
     // Create Frame 1 
     JFrame frame = new JFrame("Frame 1"); 
     frame.setSize(333,333); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     // Create panel 
     JPanel panel = new JPanel(); 

     // Create button 
     JButton button = new JButton("Press me!"); 

     // Add things 
     panel.add(button); 
     frame.add(panel); 
     frame.setVisible(true); 

     // Add the action listener to that button 
     button.addActionListener(new action()); 

    } 

    public static class action implements ActionListener { 

     public void actionPerformed(ActionEvent e) { 
      // Create Frame 2 
       JFrame frame2 = new JFrame("Frame 2"); 
       frame2.setSize(200,200); 
       frame2.setVisible(true); 
       frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       JLabel label = new JLabel("Clicked!"); 
       JPanel panel2 = new JPanel(); 

       // First add to frame2 the panel just create 
       frame2.add(panel2); 

       // Add to panel the label 
       panel2.add(label); 
     } 

    } 

} 

それとも、このように匿名の内部クラスを使用して、ActionListenerを宣言することができます。後半

button.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) { 
       // Do things here 
      } 

     }); 
+0

ありがとう、しかし私は少し質問がある、なぜ私はframe2.setVisible(真);テキスト2を見るためにframe2の終わりに???その男のビデオでは、彼はそれを多くの上に置いて、私のコンピュータでは、最後の行にする必要があります... – Master345

1

日私はまだそれを追加します。

Web上のJavaのactionListenerの例は、複雑すぎます。これを理解するには、フォーム、ボタン、およびactionListenerが本当に必要です。以下の例では、 'ActionListenerを実装する'ことにより、リスナーとしてフォームサーバーを追加します。

import java.applet.Applet; 
import java.awt.Button; 
import java.awt.Toolkit; 
import java.awt.BorderLayout; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class Sample extends Applet implements ActionListener { 
    Button button; 

    public void init() { 
     setLayout(new BorderLayout()); 
     button = new Button("Test"); 
     add("Center", button); 

     button.addActionListener(this); 
    } 

    public void actionPerformed(ActionEvent e) { 
     // your code to do what you want when the button was clicked goes here 
    } 
} 
+1

GUIクラスは、独自のリスナーを実装することは簡単な例やおもちゃのプログラムのために動作しますが、 「現実の」プログラムでは使用できません。私がお勧めするものではありません。 –

+0

私は同意するだろうが、彼の最初の文章でOPは「彼はジャワを学んでいた」と述べているが、初めて彼をライオンに捨てたくない。 –

関連する問題