2016-04-16 11 views
0

jframeでjbuttonをクリックすると、Start.javaファイルが実行されます。 Start.javaが正常に実行されています。 jframeでjbuttonをクリックしたときに同じ実行をしたい、私を助けてください。jframeのjbuttonをクリックして.javaファイルを実行する方法は?

私のJFrameコードが

private void jButton3MouseClicked(java.awt.event.MouseEvent evt) { 

    // i want to execute Start.java file on clicking the button 

    Start s = new Start(); 
    String in = s.getTxt; 
    System.out.println(in); 
    repaint(); 
} 

マイStart.javaファイルをJButtonのたは次のとおりです。

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


public class Start extends JPanel{ 

public String getTxt; 
public Start() 
{ 

final JTextField jf = new JTextField(20); 
jf.setBounds(30, 30, 250, 30); 
final JButton j1 = new JButton("OK"); 
j1.setBounds(80, 80, 100, 30); 
setLayout(null); 

add(jf); 
add(j1); 

    j1.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 


         getTxt = jf.getText(); 
         System.out.println(getTxt); 

        } 
        }); 
    } 


public static void main(String[] args) { 

    JFrame f = new JFrame("Interest"); 
    f.getContentPane().add(new Start()); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.setPreferredSize(new Dimension(310,250)); 
    f.setMaximumSize(new Dimension(310,250)); 
    f.setMinimumSize(new Dimension(310,250)); 

    f.pack(); 
    f.setVisible(true); 
} 

}

+0

を見てに時間がかかることをお勧めしますが、 'Start'あなた既存のコンテナのインスタンスを追加する方法について考えたことはありますか?おそらく 'CardLayout'を使用していますか?新しい 'JFrame'を作成し、そのインスタンスに' Start'のインスタンスを追加するか、 'JDialog'を使用することを考えましたか? – MadProgrammer

+0

私はJframeでStartインスタンスを追加しようとしましたが、あるフレームから別のフレームに移動することについてはわかりません。既存のコンテナに追加しようと思います。 –

答えて

3

、あなたのコードでやっているように見えるものに基づいて、I How to Make Dialogsをご覧になることを強くお勧めします。その主な理由は、モーダルダイアログは、ダイアログが表示されるポイントでプログラムの実行を停止させ、閉じたときに再開して、ユーザーが変更した可能性のある値を調べることができます。

私が最初にあなたのプログラムが動作するように取得しようとしたときに、これは何が起こったのかです...

Bad

だから、あなたのコードに掘った後、私はあなたがsetLayout(null);をしたい気づきました。これはあなたを迎えに戻ってくるつもりです。あなたはこれをやめ、レイアウト管理APIの使い方を学ぶことを強くお勧めします。

だから、私はあなたのコードに飛び込んだとレイアウトマネージャを追加...

public class Start extends JPanel { 

    public String getTxt; 

    public Start() { 

     final JTextField jf = new JTextField(20); 
     final JButton j1 = new JButton("OK"); 
     setLayout(new GridBagLayout()); 

     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridwidth = GridBagConstraints.REMAINDER; 

     add(jf, gbc); 
     add(j1, gbc); 

     j1.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 

       getTxt = jf.getText(); 
       System.out.println(getTxt); 

      } 
     }); 
    } 

    public static void main(String[] args) { 

     JFrame f = new JFrame("Interest"); 
     f.getContentPane().add(new Start()); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setPreferredSize(new Dimension(310, 250)); 
     f.setMaximumSize(new Dimension(310, 250)); 
     f.setMinimumSize(new Dimension(310, 250)); 

     f.pack(); 
     f.setVisible(true); 
    } 
} 

は、今私は...

better

オーケーを取得し、今2つのボタンがありますし、ユーザーが中央のボタンをクリックしない限り、テキストは決して設定されません!

実際、この種のものでは、ボタンは必要ありません。それを表示するために

Done!

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Test { 

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

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

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      setLayout(new GridBagLayout()); 
      JButton btn = new JButton("Surprise"); 
      add(btn); 

      btn.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        Start start = new Start(); 
        JOptionPane.showMessageDialog(TestPane.this, start, "Surprise", JOptionPane.PLAIN_MESSAGE); 
        System.out.println(start.getText()); 
       } 
      }); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 

    } 
} 

...あなただけの

public class Start extends JPanel { 

    final JTextField jf = new JTextField(20); 

    public Start() { 
     setLayout(new GridBagLayout()); 

     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridwidth = GridBagConstraints.REMAINDER; 

     add(jf, gbc); 
    } 

    public String getText() { 
     return jf.getText(); 
    } 

    public static void main(String[] args) { 

     JFrame f = new JFrame("Interest"); 
     f.getContentPane().add(new Start()); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setPreferredSize(new Dimension(310, 250)); 
     f.setMaximumSize(new Dimension(310, 250)); 
     f.setMinimumSize(new Dimension(310, 250)); 

     f.pack(); 
     f.setVisible(true); 
    } 
} 

...例えば、JTextFieldの現在のテキストを返すことができる方法を必要とする。そして、私は使用することができます!

私は強くあなたがLaying Out Components Within a Container

関連する問題