2016-04-06 3 views
2

görüntüler. Bir JFrame'de bir String girişi almalı ve diğerinde göstermem gerekir. İkinci görevim, verilen dizeyi ikinci çerçevedeki daha büyük bir yazı tipinde, 1 sn aralıklarla yanıp sönmesidir. Nasıl devam edilir?Java, giriş dizgisini bir Jframe'e alır ve başka bir

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
class Input{ 

    String hinput; 
    private JFrame mainFrame; 
    private JLabel headerLabel; 
    private JLabel statusLabel; 
    private JPanel controlPanel; 

    private void prepareGUI(){ 
     mainFrame = new JFrame("STRING"); 
     mainFrame.setSize(500,100); 
     headerLabel = new JLabel("", JLabel.CENTER);   
     controlPanel = new JPanel(); 
     controlPanel.setLayout(new FlowLayout()); 
     mainFrame.add(headerLabel); 
     mainFrame.add(controlPanel); 
     mainFrame.setVisible(true); 
    } 

    private void showTextField(){ 

     JLabel stringlabel= new JLabel("String ", JLabel.RIGHT); 
     final JTextField userText = new JTextField(20);  
     JButton submitButton = new JButton("Submit"); 
     submitButton.addActionListener(new mylistener()); 
     submitButton.setActionCommand("open"); 
     controlPanel.add(stringlabel); 
     controlPanel.add(userText); 
     controlPanel.add(submitButton); 
     mainFrame.setVisible(true); 

    } 
    private class mylistener implements ActionListener{ 
     public void actionPerformed(ActionEvent e){ 
     String cmd = e.getActionCommand(); 
     if(cmd.equals("open")){ 
      mainFrame.dispose(); 
      NewJFrame nj= new NewJFrame(hinput); 
     } 
     } 
    } 
    public static void main(String args[]){ 
     Input Inp = new Input();  
     Inp.prepareGUI(); 
     Inp.showTextField(); 
    } 
} 
class NewJFrame{ 

    JFrame mainFrame; 
    String text; 
    JLabel l1; 
    JTextField tb1; 
    public NewJFrame(String t){ 

      text=t; 
      mainFrame=new JFrame("STRING"); 
      mainFrame.setSize(800,800); 

      mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      l1=new JLabel("Entered string"); 
      tb1.setText(text); 
      mainFrame.add(l1); 
      mainFrame.add(tb1); 
      mainFrame.setVisible(true); 
    } 
}  

'Gönder' düğmesini tıkladıktan sonra geri dönüyorum. Lütfen hataları işaret edin.

+0

Sen faydalanmak olabilir JDialog' veya JOptionPane’in kullanımı muhtemelen hayatınızı kolaylaştırır – MadProgrammer

cevap

1

Çok sevdiği NewJFrame sınıfında TB1 instatiating tarafından hata kurtulabilirsiniz:

class NewJFrame{ 

    JFrame mainFrame; 
    String text; 
    JLabel l1; 
    JTextField tb1; 
    public NewJFrame(String t){ 

      text=t; 
      mainFrame=new JFrame("STRING"); 
      mainFrame.setSize(800,800); 

      // *** must init tb1!!! ***/// 
      JTextField tb1 = new JTextField(); 

      mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      l1=new JLabel("Entered string"); 
      tb1.setText(text); 
      mainFrame.add(l1); 
      mainFrame.add(tb1); 
      mainFrame.setVisible(true); 
    } 
} 

başka açılması bir JFrame yazılan mesaj geldi gelince, ben biraz değiştirilmiş bir çözüm var. Belki başka bir JPanel'de bir JPanel ekranında bir JTextField'a metin girmiş olabilir. Bunu yapmak için, aşağıdaki kodu kullanabilirsiniz:

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JButton; 
import javax.swing.JTextField; 
import javax.swing.JLabel; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.FlowLayout; 

public class SimpleGUI extends JFrame { 

    private final JPanel firstPanel; 
    private final JPanel secondPanel; 
    private final JButton submitButton; 
    private final JTextField textField; 
    private final JLabel secondPanelLabel; 

    public SimpleGUI() { 

     // sets the title of the JFrame 
     super("SimpleGUI"); 

     setLayout(new FlowLayout()); 

     // inits both JPanels 
     firstPanel = new JPanel(); 
     secondPanel = new JPanel(); 

     // inits empty second JLabel and adds to the secondPanel 
     secondPanelLabel = new JLabel(); 
     secondPanel.add(secondPanelLabel); 

     // makes the secondPanel invisible for the time being 
     secondPanel.setVisible(false); 

     // inits the submit button 
     submitButton = new JButton("Submit"); 

     // event-handler for submit button, will set the text in the 
     // secondPanelLabel to the text in the JTextField the user types 
     // into. It then makes the firstPanel (with the text field and button), 
     // invisible, and then makes the second panel visible. 
     submitButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       secondPanelLabel.setText(textField.getText()); 
       firstPanel.setVisible(false); 
       secondPanel.setVisible(true); 
      } 
     }); 

     // inits the textField 
     textField = new JTextField(10); 

     // adds the button and the text field to the firstPanel 
     firstPanel.add(submitButton); 
     firstPanel.add(textField); 

     // adds both panels to this JFrame 
     this.add(firstPanel); 
     this.add(secondPanel); 
    } 
} 

Ve burada kendiniz için bunu test böylece SimpleGUI yapıları bir ana yöntemi ile bir sınıftır:

import javax.swing.JFrame; 

public class SimpleGUITest { 
    public static void main(String[] args) { 
     SimpleGUI frame = new SimpleGUI(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(500, 500); 
     frame.setVisible(true); 
    } 
} 
+0

init. tb1 traceback'i kaldırdı. Fakat ikinci Çerçevede hiçbir şey gösterilmez. – Souvik

+0

Evet, ikinci kareyi kodunuzda nasıl uygulayacağınızı anlayamadım. Önerime bakıp bundan bir şey kullanıp kullanamayacağına baktın mı? Ben olsam iki JFrames kullanmazdım ... –

+0

Evet, bu yapacak. Çok teşekkürler. – Souvik