2017-01-19 4 views
-1

私は簡単なプログラムを構築しています。私はJDialogから拡張されたクラスと、JFrameから拡張されたクラスを持ち、アプリケーションのGUIです。 JButtonをクリックした後でダイアログを開くActionListenerを実装しました。しかし、何も起こりません、なぜ私は理解できません。あなたがボタンにActionListenerを定義する必要がJButtonはJDialogを開けません

GUI

package nemocnice_sam; 

import java.awt.BorderLayout; 
import java.awt.FlowLayout; 
import java.awt.HeadlessException; 
import java.awt.ScrollPane; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

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

public class App extends JFrame { 

    JTable tbl = new JTable(); 
    JButton pridejPacienta = new JButton("Přidej pacienta"); 
    JButton smazPacienta = new JButton("Smaž pacienta"); 
    JButton export = new JButton("Export"); 
    JButton konec = new JButton("Konec"); 
    JPanel panel = new JPanel(); 

    PacientDialog novyPacient; 

    ActionListener al = new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 

      if(e.getSource() == pridejPacienta){ 
       novyPacient = new PacientDialog(); 
       novyPacient.setModal(true); 
       novyPacient.setVisible(true); 

      } 

     } 
    }; 

    SeznamPacientu pacienti = new SeznamPacientu(); 
    ModelPacientu model = new ModelPacientu(pacienti); 





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

    } 



    public App() { 
     setLayout(new BorderLayout()); 
     panel.setLayout(new FlowLayout(FlowLayout.LEFT)); 
     panel.add(pridejPacienta); 
     panel.add(smazPacienta); 
     panel.add(export); 
     panel.add(konec); 

     add(panel,BorderLayout.NORTH); 
     tbl.setModel(model); 
     add(new JScrollPane(tbl), BorderLayout.CENTER); 
     setVisible(true); 

     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     pack(); 
    } 





} 

ダイアログクラス

package nemocnice_sam; 

import java.awt.GridLayout; 

import javax.swing.JButton; 
import javax.swing.JDialog; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 

public class PacientDialog extends JDialog { 

    JTextField jmeno = new JTextField(); 
    JTextField prijmeni = new JTextField(); 
    JTextField rc = new JTextField(); 
    JTextField cp = new JTextField(); 
    JButton ok = new JButton("OK"); 

    public PacientDialog(){ 
     setLayout(new GridLayout(5,2)); 
     add(new JLabel("Jméno:")); 
     add(jmeno); 
     add(new JLabel("Příjmení:")); 
     add(prijmeni); 
     add(new JLabel("RČ:")); 
     add(rc); 
     add(new JLabel("ČP:")); 
     add(cp); 
     pack(); 
    } 

} 
+0

作成した 'actionListener'を、例えば' pridejPacienta.addActionListener(...) 'を使ってボタンや他のコンポーネントにバインドしていますか? – billpcs

+0

あなたの答えはありますが、ここでは簡単なチェックリストです** 1 **私のアクションは実行中ですか? ** 2 **私のアクションはボタンにバインドされていますか?** 3 **正しいボタンですか? – AxelH

+1

[mcve]を作成するときに**すべての英語**語彙を使用することを検討してください。プライマリ言語はここでは英語ですが、異なる言語で入力される入力は単に役立つ回答の可能性を低下させます。しかし、この場合ではありません。 – GhostCat

答えて

6

konec.addActionListener(al); 
+0

私はボタン "konec"を使用しようとしていません。私はpridejPacienta @ josivan –

+4

'pridejPacienta.addActionListener(al)'をクリックすると開く必要があります。あなたはあなたの文脈に基づいて答えを理解し、使用する必要があります。 josivanは単に 'mybutton.addActionListener(myActionListener)'と言うことができます。あなたはこのことから何をすべきかを理解する必要があります。 – AxelH

+0

@TomášNosek、次にpridejPacientaボタンにリスナーを追加します。 'pridejPacienta、addActionListener(al);' – josivan

5

ActionListenerだけでは不十分です。

そのリスナーは、実際にそのリスナーにイベントを送信するコンポーネントを持つと登録されているである必要があります。

だからのように、それは、例えば、対応するボタンに追加する必要があります。

以外にも
pridejPacienta.addActionListener(al); 

:あなたはそれを行うとき、あなたははないは、あなたのアクションリスナーの中にそのif (source ==チェックが必要です。 ボタンがの別名のリスナーを持っている場合、の異なるソースが表示されません。

同じ ActionListenerを複数のボタンに添付する場合は、この種のチェックが必要です。

関連する問題