2016-12-20 16 views
0

Я пытаюсь создать настольное приложение, которое откроет указанный URL.Как читать данные пользователя из JTextfield в другом классе Java

Я использую 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()); 
      } 
    } 

} 
} 

Я могу открыть указанный URL, если он указан внутри openbrowser.java, но я хочу, чтобы прочитать значение JTextField Я создал в браузоре.ява.

+1

Вы пытались использовать статические поля? Или пользовательский сеанс, где он может хранить нужную строку? – Gatusko

+0

В браузере вашего класса вы объявили экземпляр класса textfield в основном методе, который делает его доступным для него. Поэтому объявляйте объекты TextField как переменные экземпляра класса browseropen, т. Е. Вне метода. Следовательно, вы можете легко получить к ним доступ в своем подклассе. –

+0

См. Правки для ответа –

ответ

1

В настоящее время вы не можете получить информацию из JTextField в классе браузера, потому что она объявлена ​​в статическом основном методе и, следовательно, отображается только внутри этого метода. Весь ваш проект кричит нам - он еще не знает об объектно-ориентированном программировании или о том, как Java реализует его, поскольку именно это мешает вашим попыткам.

Предложения:

  • Прежде всего, узнать об объектно-ориентированном программировании с Java, в том числе использования не статических методов и поле. Есть много учебников по этому легко найти, в том числе те, которые можно найти здесь: The Really Big Index
  • Сделайте свой браузерный режим более «ООП» совместимым, предоставив ему нестатические поля и методы, включая личное поле JTextField.
  • Дайте ему общедоступный метод, который возвращает строку, удерживаемую JTextField
  • Не используйте класс openbrowserurl для расширения браузера, поскольку это не имеет смысла. Вместо этого первый класс содержит экземпляр второго класса.

Другие вопросы:

  • Это хорошо, что вы пытаетесь использовать менеджеры компоновки, а не нулевой макет и setBounds(...), но я не совсем понимаю только то, что вы пытаетесь сделать. Вы устанавливаете макет JFrame в GridLayout, который ожидает 3 строки и 4 столбца (всего 12 компонентов), и все же вы добавляете только один компонент в JFrame, «панель» JPanel. Я не уверен, что вы пытаетесь сделать, что затрудняет то, что посоветовать в этой ситуации.

Например, вы можете создать класс следующим образом:

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

, который позволил бы вне классов, чтобы отобразить эту JPanel, где это необходимо, позволит им решать, что делать, когда кнопка нажал и позволит им извлекать содержимое JTextField.

Другой вариант, чтобы получить URL более просто из JOptionPane, таких как:

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

Есть много способов кожи этого кота, но если есть одна и только одна вещь, которую я хочу стресс при ответе на этот вопрос:

Прежде чем заниматься чем-либо еще, вы захотите изучить и изучить концепции и техники OOPS.

+0

Спасибо за совет! У меня было ощущение, что я не напал на это правильно, я только начинаю с java. Я буду изучать то, что вы –