2016-12-20 5 views
0

J'essaie de créer une application de bureau qui ouvrira une URL spécifiée. J'utilise Java pour créer l'application et voici mon code jusqu'à maintenant.Comment lire l'entrée utilisateur de JTextfield dans une autre classe Java

browseropen.java

public class browseropen { 


    public static void main(String[] args) { 

      JFrame frame = new JFrame("Desktop Browser Search"); // We create our initial app frame 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // next we are making sure our app stops running 
      JPanel panel = new JPanel(); // Our new application window 
      JLabel optext = new JLabel("Welcome Please Enter URL to Begin!"); // Our new window text 
      frame.setSize(400, 400); // Set Application Window Size 
      //pack(); 
      // Now adding Text box 
      JTextField txtbox = new JTextField(10); 
      JButton gourl = new JButton("Go To URL"); // creating new button to activate browser function 
      frame.setVisible(true); 
      optext.setVisible(true); 
      frame.setLayout(new GridLayout(3,4,5,10)); 
      panel.add(optext); // We are adding our objects to our app window 
      panel.add(txtbox); 
      panel.add(gourl); 
      frame.add(panel); // And finally we add our app panel to our frame 
      String geturl = txtbox.getText(); 


    gourl.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      //run client main 
      runClient(); 
     } 




public void runClient() { 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      String[] args1={"10"}; 
      openbrowserurl.main(args1); 
     } 
    }); 
} 
}); 
    } 

    public void texturl() { 



    }; 



} 

openbrowser.java

public class openbrowserurl extends browseropen { 

    public static void main(String[] args) { 

     Desktop desktop = Desktop.getDesktop(); 
     String urlinput = "https://www.google.com"; 
     if(!java.awt.Desktop.isDesktopSupported()) { 
      System.err.println("Desktop Not Supported"); 
      System.exit(1); 
     } 
     if (args.length == 0) { 
       System.out.println("Usage: OpenURI [URI [URI ... ]]"); 
       System.exit(0); 
     } 

     if(!desktop.isSupported(java.awt.Desktop.Action.BROWSE)) { 

      System.err.println("Desktop doesn't support the browse action (fatal)"); 
      System.exit(1); 
     } 

     for (String arg : args) { 

      try { 

       java.net.URI uri = new java.net.URI(urlinput); 
       desktop.browse(uri); 
      } 
      catch (Exception e) { 

       System.err.println(e.getMessage()); 
      } 
    } 

} 
} 

je peux ouvrir une URL spécifiée si elle est spécifiée dans la openbrowser.java, mais je veux lire la valeur du JTextField J'ai créé dans browseropen.java.

+1

Avez-vous essayé d'utiliser des champs statiques? Ou session utilisateur où il peut stocker la chaîne que vous voulez? – Gatusko

+0

Dans votre navigateur de classe, vous avez déclaré l'instance de la classe textfield dans la méthode principale, ce qui rend la portée disponible. Donc déclarez les objets TextField en tant que variables d'instance de la classe browseropen, c'est-à-dire en dehors de la méthode. Par conséquent, vous pouvez facilement y accéder dans votre sous-classe. –

+0

S'il vous plaît voir les modifications à répondre –

Répondre

1

Vous ne pouvez actuellement pas obtenir d'informations à partir de JTextField dans la classe browseropen car celle-ci est déclarée dans une méthode principale statique et n'est donc visible que dans cette méthode. Tout votre projet nous interpelle: il ne connaît pas encore la programmation orientée objet ni la façon dont Java l'implémente, car c'est ce qui entrave vos tentatives.

Suggestions:

  • Tout d'abord, à savoir sur la programmation orientée objet avec Java, y compris l'utilisation des méthodes et des champs non statiques. Il existe de nombreux didacticiels sur ce qui sont faciles à trouver, y compris ceux qui peuvent être trouvés ici: The Really Big Index
  • Rendre votre navigateur plus "OOP" compatible en lui donnant des champs non statiques et des méthodes, y compris un champ JTextField privé.
  • Donnez-lui une méthode publique qui retourne la chaîne détenue par le JTextField
  • Ne pas avoir votre classe openbrowserurl étendre le browseropen que cela n'a aucun sens. Au lieu de cela, la première classe contient une instance de la seconde classe.

Autres questions:

  • Il est bon que vous essayez d'utiliser les gestionnaires de mise en page plutôt que la mise en page nulle et setBounds(...), mais je suis confus au sujet de tout ce que vous essayez de faire. Vous définissez la disposition de JFrame à un GridLayout, un qui attend 3 lignes et 4 colonnes (12 composants en tout), et pourtant vous ajoutez seulement un composant au JFrame, le "panneau" JPanel. Je ne suis pas sûr de ce que vous essayez de faire, ce qui rend difficile ce qu'il faut conseiller dans cette situation.

Par exemple, vous pouvez créer une classe comme ceci:

public class GetUrlPanel extends JPanel { 
    private static final String PROMPT = "Welcome Please Enter URL to Begin!"; 
    private JTextField urlField = new JTextField(10); 
    private JButton goToUrlButton = new JButton("Go To URL"); 

    public GetUrlPanel() { 
     add(new JLabel(PROMPT)); 
     add(urlField); 
     add(goToUrlButton); 
    } 

    public String getUrlFieldText() { 
     return urlField.getText(); 
    } 

    public void addGoToUrlListener(ActionListener listener) { 
     goToUrlButton.addActionListener(listener); 
    } 
} 

qui permettrait en dehors des cours pour afficher cette JPanel partout où il est nécessaire, leur permettrait de décider quoi faire lorsque le bouton est poussé, et leur permettrait d'extraire le contenu de JTextField.

Une autre option est d'obtenir l'URL plus simplement d'un JOptionPane, tels que:

public static void main(String[] args) { 
    if (!Desktop.isDesktopSupported()) { 
     System.err.println("Desktop is not supported. Exiting"); 
     System.exit(1); 
    } 
    String message = "Welcome Please Enter URL to Begin!"; 
    String title = "Enter URL"; 
    int messageType = JOptionPane.PLAIN_MESSAGE; 
    String url = JOptionPane.showInputDialog(null, message, title, messageType); 
    if (url == null) { 
     System.err.println("Cancelled by user"); 
     System.exit(0); 
    } else if (url.trim().isEmpty()) { 
     System.err.println("You must enter a URL. Exiting"); 
     System.exit(2); 
    } 


    URI uri = null; 
    try { 
     uri = new URI(url); 
     Desktop desktop = Desktop.getDesktop(); 
     desktop.browse(uri); 
    } catch (URISyntaxException | IOException e) { 
     String text = "Invalid URL \"" + url + "\". Exiting"; 
     System.err.println(text); 
     e.printStackTrace();    
    } 
} 

Il y a beaucoup de façons de la peau ce chat, mais s'il y a une et une seule chose que je veux insister pour répondre à cette question, c'est ceci:

Vous voudrez étudier et apprendre les concepts et les techniques OOPS avant de faire quoi que ce soit d'autre.

+0

Merci pour le conseil! J'avais le sentiment de ne pas attaquer correctement, je commence juste avec Java. Je vais regarder dans les choses que vous avez partagées –