2017-06-24 24 views
0

JButton ActionListenerを自分のGUIとは異なるクラスで実行しようとしています。だから私は、ボタンを動作させるが、私は "アクセス"することはできません、彼らは私がそれらにアクセスしたいだけ "空"です。異なるクラスのJButton ActionListenerを実行

は、だから、私のGUIクラスの:

public class CaeserGUI extends JFrame { 

    JPanel contentPane; 
    private JTextField txt_input; 
    private JTextField number_input; 
    private JButton btn_translate; 
    private JTextArea txt_output; 
    private JTextField txt_input2; 
    private JTextField number_input2; 
    private JTextArea txt_output2; 

    /** 
    * Launch the application. 
    * Author: Paul Viehmann 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        CaeserGUI frame = new CaeserGUI(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public CaeserGUI() { 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 450, 300); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(null); 

     txt_input = new JTextField(); 
     txt_input.setBounds(10, 38, 363, 20); 
     contentPane.add(txt_input); 
     txt_input.setColumns(10); 

     number_input = new JTextField(); 
     number_input.setBounds(383, 38, 41, 20); 
     contentPane.add(number_input); 
     number_input.setColumns(10); 

     JTextPane txtpnZubersetzenderSatz = new JTextPane(); 
     txtpnZubersetzenderSatz.setText("Zu \u00FCbersetzender Satz:"); 
     txtpnZubersetzenderSatz.setBounds(10, 11, 126, 20); 
     contentPane.add(txtpnZubersetzenderSatz); 

     JTextPane txtpnVerschiebung = new JTextPane(); 
     txtpnVerschiebung.setText("Verschiebung:"); 
     txtpnVerschiebung.setBounds(349, 11, 75, 20); 
     contentPane.add(txtpnVerschiebung); 

     txt_output = new JTextArea(); 
     txt_output.setBounds(10, 69, 414, 40); 
     contentPane.add(txt_output); 

     JTextPane txtpnZuDechiffrierenderSatz = new JTextPane(); 
     txtpnZuDechiffrierenderSatz.setText("Zu dechiffrierender Satz:"); 
     txtpnZuDechiffrierenderSatz.setBounds(10, 120, 126, 20); 
     contentPane.add(txtpnZuDechiffrierenderSatz); 

     txt_input2 = new JTextField(); 
     txt_input2.setColumns(10); 
     txt_input2.setBounds(10, 147, 363, 20); 
     contentPane.add(txt_input2); 

     number_input2 = new JTextField(); 
     number_input2.setColumns(10); 
     number_input2.setBounds(383, 147, 41, 20); 
     contentPane.add(number_input2); 

     JTextPane textPane_1 = new JTextPane(); 
     textPane_1.setText("Verschiebung:"); 
     textPane_1.setBounds(349, 120, 75, 20); 
     contentPane.add(textPane_1); 

     txt_output2 = new JTextArea(); 
     txt_output2.setBounds(10, 176, 414, 40); 
     contentPane.add(txt_output2); 

     ActionListener actionListener = new ButtonListener(number_input, number_input2, btn_translate, txt_output, txt_input, txt_input2, txt_output2); 

     btn_translate = new JButton("\u00DCbersetzen"); 
     btn_translate.addActionListener(actionListener); 
     btn_translate.setBounds(10, 227, 414, 23); 
     contentPane.add(btn_translate); 
    } 
} 

そして、それは私のリスナークラスです:私はボタンを押すと

public class ButtonListener implements ActionListener{ 

    private JTextField txt_input; 
    private JTextField number_input; 
    private JButton btn_translate; 
    private JTextArea txt_output; 
    private JTextField txt_input2; 
    private JTextField number_input2; 
    private JTextArea txt_output2; 

    public ButtonListener(JTextField txt_input, JTextField number_input, 
          JButton btn_translate, JTextArea txt_output, 
          JTextField txt_input2, JTextField number_input2, 
          JTextArea txt_output2){ 

     this.txt_input = txt_input; 
     this.number_input = number_input; 
     this.btn_translate = btn_translate; 
     this.txt_output = txt_output; 
     this.txt_input2 = txt_input2; 
     this.number_input2 = number_input2; 
     this.txt_output2 = txt_output2; 
    } 

    public void actionPerformed(ActionEvent e){ 
     if(txt_input.getText().equals("")){ 
      System.exit(0); 
     }else{ 
     } 
    } 
} 

は、私のプログラムの終了にも、私は、TextFieldで何かを書きます。

私は他の多くの投稿を読んでいますが、それを動作させることはできませんでした。

すべての回答に感謝します。

答えて

1

あなたはこれが意味

+---------------------------+--------------------------+ 
| ActionListener Parameters | The Order You're Passing | 
+---------------------------+--------------------------+ 
| txt_input     | number_input    | 
| number_input    | number_input2   | 
| btn_translate    | btn_translate   | 
| txt_output    | txt_output    | 
| txt_input2    | txt_input    | 
| number_input2    | txt_input2    | 
| txt_output2    | txt_output2    | 
+---------------------------+--------------------------+ 

(私の知る限り、あなたの命名規則に基づいて)間違った順序でパラメータを渡すように見える、あなたはActionListenertxt_inputの値を検査する場合、あなたが実際にnumber_input値を見ている...これは

私の「一般」の推薦は次のようになり、私には悲鳴の問題は、「テキスト」と「テキスト2」よりも優れた名前で、ゲッターとセッターを提供interfaceを作成することができます、その意味をより明確に区別することができます。私はCaeserGUIこのinterfaceを実装し、その後nullレイアウトを使用したinterface

避けのインスタンスへの単一の参照を取っActionListener、それを渡す必要があり、ピクセル完璧なレイアウトは、現代のUIデザインの中に錯覚していると思います。コンポーネントの個々のサイズに影響する要因は多すぎますが、いずれも制御できません。スイングは、レイアウトマネージャーと協力してコアで作業するように設計されています。これにより、問題の終わりがなくなり、整流しようとする時間が長くなります。

私が反応しすぎると思われる場合は、私は

Bad Layout

は、2番目のフィールドに「キャレットが」壊れているかを参照してください私のPC上でコードを実行するとどうなりますか?

私はテキストを設定するのではなく、プロンプトを表示することをお勧めします。なぜなら、それはちょっと混乱しているからです。詳細については、How to Use Labelsを参照してください

JTextPaneのようなコンポーネントは実際にはJScrollPaneにラップされており、コンポーネントの視覚的境界を越えて拡大するとテキストを見ることができます。詳細については、How to Use Scroll Panesを参照してください

+0

私はそれらを間違って渡しました... D:しかし、私もインターフェイスを試します:D – itsPauV

+0

あなたがパラメータを混ぜ合わせる最後の時ではありません:P – MadProgrammer

+0

ありがとうございましたより良い仕事の方法:D – itsPauV

関連する問題