2014-01-07 65 views
-1

jframe 1:用戶將輸入在文本字段上詢問的信息,當他們點擊開始按鈕時,輸入應該顯示在另一個jframe中。如何使輸入在第一個jframe中的文本字段中輸入的內容顯示在另一個jframe上的jlabel上?

jframe 2:在jframe1的文本字段中輸入的信息應該出現在jlabels上。

+2

使用[單幀](http://stackoverflow.com/q/9554636/230513)和一個對話框。 – trashgod

+0

除了@trashgod的忠告之外,請參閱[使用多個JFrames,好/壞實踐?](http://stackoverflow.com/a/9554657/418556) –

回答

0

如果jframe 1調用jframe 2,那麼你可以在jframe 2中創建一個構造函數,並傳遞這個值。

或者你可以通過讓一個包含jframe 1的對象來做到這一點,然後進入第二幀,通過getter方法獲取它們。

但是,對於一個良好的習慣,您應該使用單個jframe和對話框。

0
JFrame frame1 = new JFrame("frame1"); 
    JPanel panel = new JPanel(); 
    final JTextField textField = new JTextField("Text Here"); 
    JButton button = new JButton("Copy label to other frame"); 
    panel.add(textField); 
    panel.add(button); 
    frame1.add(panel); 
    frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame1.pack(); 
    frame1.setLocationByPlatform(true); 
    frame1.setVisible(true); 

    JFrame frame2 = new JFrame("frame2"); 
    final JLabel label2 = new JLabel("Label 2 Text"); 
    frame2.add(label2); 
    frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame2.pack(); 
    frame2.setLocationRelativeTo(null); 
    frame2.setVisible(true); 

    button.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      label2.setText(textField.getText()); 
     } 
    }); 

當然,你的問題並沒有很好地表達你真正想要完成的或者更好的,你已經嘗試過的。儘管如此,這些代碼可以滿足你的要求。

0

如果您想將用戶輸入的文本放在jlabel上,您必須首先創建jframe1,然後jframe1將創建jframe2將文本傳遞給它。 jframe2將創建jlabels設置構造函數中的文本。

如果你想jframe1消失,我認爲你不能關閉它(因爲如果你關閉它,像jframe1創建jframe2,這個也將被關閉)。當用戶點擊開始按鈕時,您可以隱藏jframe1將其設置爲不可見

jframe1.setVisible(false); 
1
  • 是不是好習慣使用兩個多幀?
  • 是否有替代使用兩個框架?
  • 有什麼選擇? CardLayout,模態JDialog等
  • 我還會幫你解決這個問題嗎? 當然,爲什麼不呢?

在第一幀中有第二幀的實例。將信息傳遞給第二個構造函數JFrame。就這麼簡單。

public class Frame1 extends JFrame { 
    String text1; 
    String text2; 
    Frame2 frame2;  <--- second frame 

    .... 

    public void actionPerformed(ActionEvent e) { 
     text1 = textField1.getText(); 
     text2 = textField2.getText(); 
     frame2 = new Frame2(text1, text2); 
    } 
} 

public class Frame2 extends JFrame { 
    String text1; 
    String text2; 

    public Frame2(String text1, String text2){ 
     this.text1 = text1; 
     this.text2 = text2; 
    } 
} 

當第二框架在actionPerformed實例化時,它將使所述第二幀出現。它也正在傳遞來自文本字段的信息。您可能還想要處理第一幀。


模態JDialog只是容易使作爲JFrame是相同的結構。唯一的區別是你可以設置它爲模態(意味着它不是其他的JDialog)可以被訪問。見this answer看到鋤頭建立JDialog一個登錄

下面是一個使用非常簡單的程序符合你的要求

import java.awt.BorderLayout; 
import java.awt.Frame; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 

public class JDialogDemo { 
    MyDialog dialog; 
    JLabel label; 
    JFrame frame; 

    public JDialogDemo() { 

     label = new JLabel("   "); 
     frame = new JFrame("Hello World"); 
     frame.add(label); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 

     dialog = new MyDialog(frame, true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() { 
       new JDialogDemo(); 
      } 
     }); 
    } 

    class MyDialog extends JDialog { 
     private JButton button = new JButton("Submit"); 
     private JTextField jtf1; 
     private JTextField jtf2; 


     public MyDialog(final Frame frame, boolean modal) { 
      super(frame, true); 

      jtf1 = new JTextField(15); 
      jtf2 = new JTextField(15); 

      add(button, BorderLayout.SOUTH); 
      add(jtf1, BorderLayout.CENTER); 
      add(jtf2, BorderLayout.NORTH); 

      button.addActionListener(new ActionListener(){ 
       public void actionPerformed(ActionEvent e) { 
        String text1 = jtf1.getText(); 
        String text2 = jtf2.getText(); 
        label.setText(text1 + " " + text2); 

        dispose(); 
        frame.revalidate(); 
        frame.repaint(); 
        frame.setVisible(true); 

       } 
      }); 

      pack(); 
      setVisible(true); 
     } 

    } 

} 

它應該很容易遵循JDialog。讓我知道如果您有任何疑問

相關問題