2016-04-16 109 views
0

點擊jframe中的jbutton,我想Start.java文件被執行;該怎麼做? Start.java執行得很好。我想在jframe中單擊jbutton時執行相同的執行,請幫助我。如何通過單擊jframe中的jbutton來執行.java文件?

我的JFrame代碼的JButton

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文件是:

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實例,但我不太確定從一個jframe移動到另一個..我會嘗試將其添加到現有的容器..謝謝 –

回答

3

所以,根據你彷彿在你的代碼在做,我強烈建議你看看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

好了,但現在有兩個按鈕,和除非用戶點擊中間按鈕,否則文本從未設置!

事實是,對於這種事情,你不需要按鈕!你只需要能夠返回JTextField目前的案文,例如方法...

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); 
    } 
} 

,然後我可以使用...

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); 
     } 

    } 
} 

顯示它!

我強烈建議你採取看看Laying Out Components Within a Container

相關問題