1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Como fazer download em uma página dentro de um JFrame?

Boa noite.. Estou desenvolvendo um Jframe que acesse a internet.. As páginas estão carregando, tudo certinho, porém, preciso que o usuário realize downloads, e eu nao faço ideia de como configurar a pasta e o recebimento do arquivo quando é clicado em download..

package simpleswingbrowser;

import javafx.application.Platform; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.embed.swing.JFXPanel; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.web.WebEngine; import javafx.scene.web.WebEvent; import javafx.scene.web.WebView;

import javax.swing.; import java.awt.; import java.awt.event.*; import java.net.MalformedURLException; import java.net.URL;

import static javafx.concurrent.Worker.State.FAILED;

public class SimpleSwingBrowser extends JFrame {

private final JFXPanel jfxPanel = new JFXPanel(); private WebEngine engine;

private final JPanel panel = new JPanel(new BorderLayout()); private final JLabel lblStatus = new JLabel();

private final JButton btnGo = new JButton("Go"); private final JTextField txtURL = new JTextField(); private final JProgressBar progressBar = new JProgressBar();

public SimpleSwingBrowser() { super(); initComponents(); }

private void initComponents() { createScene();

ActionListener al = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { loadURL(txtURL.getText()); } };

btnGo.addActionListener(al); txtURL.addActionListener(al);

progressBar.setPreferredSize(new Dimension(150, 18)); progressBar.setStringPainted(true);

JPanel topBar = new JPanel(new BorderLayout(5, 0)); topBar.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 5)); topBar.add(txtURL, BorderLayout.CENTER); topBar.add(btnGo, BorderLayout.EAST);

JPanel statusBar = new JPanel(new BorderLayout(5, 0)); statusBar.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 5)); statusBar.add(lblStatus, BorderLayout.CENTER); statusBar.add(progressBar, BorderLayout.EAST);

panel.add(topBar, BorderLayout.NORTH); panel.add(jfxPanel, BorderLayout.CENTER); panel.add(statusBar, BorderLayout.SOUTH);

getContentPane().add(panel);

setPreferredSize(new Dimension(1024, 600)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); }

private void createScene() {

Platform.runLater(new Runnable() { @Override public void run() {

WebView view = new WebView(); engine = view.getEngine();

engine.titleProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue<? extends String> observable, String oldValue, final String newValue) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { SimpleSwingBrowser.this.setTitle(newValue); } }); } });

engine.setOnStatusChanged(new EventHandler>() { @Override public void handle(final WebEvent event) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { lblStatus.setText(event.getData()); } }); } });

engine.locationProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue<? extends String> ov, String oldValue, final String newValue) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { txtURL.setText(newValue); } }); } });

engine.getLoadWorker().workDoneProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue<? extends Number> observableValue, Number oldValue, final Number newValue) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { progressBar.setValue(newValue.intValue()); } }); } });

engine.getLoadWorker() .exceptionProperty() .addListener(new ChangeListener() {

public void changed(ObservableValue<? extends Throwable> o, Throwable old, final Throwable value) { if (engine.getLoadWorker().getState() == FAILED) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { JOptionPane.showMessageDialog( panel, (value != null) ? engine.getLocation() + "\n" + value.getMessage() : engine.getLocation() + "\nUnexpected error.", "Loading error...", JOptionPane.ERROR_MESSAGE); } }); } } });

jfxPanel.setScene(new Scene(view)); } }); }

public void loadURL(final String url) { Platform.runLater(new Runnable() { @Override public void run() { String tmp = toURL(url);

if (tmp == null) { tmp = toURL("http://" + url); }

engine.load(tmp); } }); }

private static String toURL(String str) { try { return new URL(str).toExternalForm(); } catch (MalformedURLException exception) { return null; } }

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

public void run() { SimpleSwingBrowser browser = new SimpleSwingBrowser(); browser.setVisible(true); browser.loadURL("http://google.com"); } }); } } https://www.filepicker.io/api/file/3FglDfHSdCVRkcms5s6C

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags web swing email download ou faça a sua própria pergunta.