Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [JAVA] Link clikkabile

    Ciao a tutti,
    avrei la necessita' di creare un link in html all'interno di un jEditorPanel. Ho provato con il classico <a></a> ma non funge purtroppo.
    Spero che sia possibile fare questo perche' in questo jEdtiroPane vengono caricate ogni volta nuove informazioni con un numero di link variabili misti a testo, sarebbe difficile altrimenti.

    Grazie in anticipo!
    ~Wakka~

  2. #2

    up

    Nessuno sa darmi una mano?
    ~Wakka~

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Non merita una risposta, per il semplice fatto che IL PRIMO e unico brano di codice nelle API di java alla voce JEditorPane (e non JEditorPanel che non esiste, almeno non nelle API standard) è proprio la risposta alla tua domanda... ma quand'è che imparate a programmare con le API aperte a portata di click!?

    http://java.sun.com/javase/6/docs/ap...ditorPane.html
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Beh... grazie.
    Alla pagina che mi hai linkato e' presente il codice
    codice:
         class Hyperactive implements HyperlinkListener {
     
             public void hyperlinkUpdate(HyperlinkEvent e) {
                 if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                     JEditorPane pane = (JEditorPane) e.getSource();
                     if (e instanceof HTMLFrameHyperlinkEvent) {
                         HTMLFrameHyperlinkEvent  evt = (HTMLFrameHyperlinkEvent)e;
                         HTMLDocument doc = (HTMLDocument)pane.getDocument();
                         doc.processHTMLFrameHyperlinkEvent(evt);
                     } else {
                         try {
                             pane.setPage(e.getURL());
                         } catch (Throwable t) {
                             t.printStackTrace();
                         }
                     }
                 }
             }
         }
    Il fatto e' che non so davvero che farmene, perche' praticamente io ho un jframe incui il contenuto del JEditorPane ( =P ) viene caricato dinamicamente. E questo in questo contenuto sono presenti anche dei link che vorrei svolgessero delle funzioni java. Purtroppo questo brano di codice non so come usarlo
    ~Wakka~

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Esatto, anzi lì c'è pure "troppo"

    codice:
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.*;
    
    public class ActiveLinksPane extends JFrame implements HyperlinkListener {
        
        
      private JEditorPane htmlPane;
      private String initialURL;
    
      public ActiveLinksPane(String initialURL) {
        super("Simple Swing Browser");
        this.initialURL = initialURL;
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
    
        try {
            htmlPane = new JEditorPane(initialURL);
            htmlPane.setEditable(false);
            htmlPane.addHyperlinkListener(this);
            JScrollPane scrollPane = new JScrollPane(htmlPane);
            this.getContentPane().add(scrollPane, BorderLayout.CENTER);
        } 
        catch(Exception e) {}
    
        this.setSize(400,400);
        this.setVisible(true);
      }  
    
      public void hyperlinkUpdate(HyperlinkEvent event) {
        if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
          try {
            htmlPane.setPage(event.getURL());        
          } 
          catch(Exception e) {}
        }
      }
      
      public static void main(String[] args) {
        if (args.length == 0)
          new ActiveLinksPane("http://www.google.com");
        else
          new ActiveLinksPane(args[0]);
      } 
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Purtroppo il tuo esempio non sono riuscito a farlo partire
    Ne ho realizzato uno cercando il piu' possibile di seguire la logica, ma non ha funzionato:

    codice:
    import javax.swing.event.HyperlinkEvent;
    
    public class FrameLink extends javax.swing.JFrame {
        
    
        public FrameLink() {
            initComponents();
        }
        
        private void initComponents() {
            jScrollPane1 = new javax.swing.JScrollPane();
            jEditorPane1 = new javax.swing.JEditorPane();
    
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            setTitle("Pannello HTML");
            jEditorPane1.setEditable(false);
            jEditorPane1.setText("<html> Clikka <a href=\"www.google.it\">qui</a> </html>");
            jEditorPane1.setContentType("text/html");
            jEditorPane1.addHyperlinkListener(new javax.swing.event.HyperlinkListener() {
                public void hyperlinkUpdate(javax.swing.event.HyperlinkEvent evt) {
                    jEditorPane1HyperlinkUpdate(evt);
                }
            });
    
            jScrollPane1.setViewportView(jEditorPane1);
    
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 376, Short.MAX_VALUE)
                    .addContainerGap())
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 276, Short.MAX_VALUE)
                    .addContainerGap())
            );
            pack();
        }
    
        private void jEditorPane1HyperlinkUpdate(javax.swing.event.HyperlinkEvent evt) {                                             
        if (evt.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
          try {
            jEditorPane1.setPage(evt.getURL());
            System.out.print( evt.getURL() );
          } 
          catch(Exception e) {}
        }
        }                                            
    
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new FrameLink().setVisible(true);
                }
            });
        }
    
        private javax.swing.JEditorPane jEditorPane1;
        private javax.swing.JScrollPane jScrollPane1;
    A quanto ho capito tu inserisci il link al momento della creazione dell'oggetto jEditorPane. Invece io ho link misto a testo, che imposto con setText! E purtroppo non funziona

    Per cortesia abbi pazienza
    ~Wakka~

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    E' proprio per questo motivo che ti avevo suggerito di programmare con la API aperte a portata di click... se nel costruttore passi un URL, il content-type dell'editor pane viene impostato a "text/html" automaticamente, altrimenti resta in modalità "testo" e basta...

    Visto che tu passi del testo, devi poi settare a manina il content-type in modo che l'eventuale codice xhtml venga interpretato come tale:

    In sostanza
    codice:
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.*;
    
    public class ActiveLinksPane extends JFrame implements HyperlinkListener {
        
        
      private JEditorPane htmlPane;
      private String initialURL;
    
      public ActiveLinksPane() {
        super("Simple Swing Browser");
        this.initialURL = initialURL;
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
    
        try {
            htmlPane = new JEditorPane();
            htmlPane.setEditable(false);
            htmlPane.setContentType("text/html");
            htmlPane.setText("<html><body><a href=\"http://www.google.com\">Apri Google</a></body></html>");
            htmlPane.addHyperlinkListener(this);
            JScrollPane scrollPane = new JScrollPane(htmlPane);
            this.getContentPane().add(scrollPane, BorderLayout.CENTER);
        } 
        catch(Exception e) {}
    
        this.setSize(400,400);
        this.setVisible(true);
      }  
    
      public void hyperlinkUpdate(HyperlinkEvent event) {
        if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
          try {
            htmlPane.setPage(event.getURL());        
          } 
          catch(Exception e) {}
        }
      }
      
      public static void main(String[] args) {
        new ActiveLinksPane();
      }
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    Ok!!

    Un po' a fatica e un po' a naso (non so nemmeno io come) sono riuscito a far funzionare e a riprodurre il codice che mi hai dato!
    Il casino era che io uso Netbeans e quindi non posso modificare a mano il codice della form. E lui metteva prima il Testo e poi Content-Type. Il risultato era che il Content-Type azzerava il contenuto di Testo e la casella apppariva vuota! Ora per fortuna sono riuscito a modificare con un'altro editor il codice e funziona!! Ora pero' c'e' il secondo problema che a quanto ho letto in internet non ha soluzione, pero' magari puoi suggerirmi qualcosa!

    Il link non deve contenere un'indirizzo internet bensi' il nome di una funzione che deve eseguire codice java... Come potrei fare?
    ~Wakka~

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Con netbeans puoi benissimo scrivere il codice a mano, basta non usare la modalita' proposta da netbeans (fai una nuova classe generica, gli fai estendere JFrame e te la scrivi come preferisci).
    Per il problema del codice, puoi barare mettendo i link come
    codice:
    <a href="parolaChiave">link<a>
    Poi nel hyperlinkUpdate ottieni parolaChiave con event.getDescription() e poi chiami il metodo desiderato.

    codice:
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.*;
    
    public class ActiveLinksPane extends JEditorPane implements HyperlinkListener {
        public ActiveLinksPane() {
            super();
            this.setContentType("text/html");
            this.setEditable(false);
            this.addHyperlinkListener(this);
        }
        
        public void hyperlinkUpdate(HyperlinkEvent event) {
            if (event.getEventType()==HyperlinkEvent.EventType.ACTIVATED) {
                try {
                    String metodo = event.getDescription();
                    if(metodo.equals("uno")) {
                        metodo1();
                    } else if(metodo.equals("due")) {
                        metodo2();
                    }
                } catch(Exception e) {
                    e.printStackTrace();          
                }
            }
        }
        
        public void metodo1() {
            JOptionPane.showMessageDialog(this, "Chiamo metodo1");
            this.setBackground(Color.RED);
        }
        
        public void metodo2() {
            JOptionPane.showMessageDialog(this, "Chiamo metodo2");
            this.setBackground(Color.WHITE);
        }
        
        public static void main(String[] args) {
            JFrame frame = new JFrame("Test");
            ActiveLinksPane pannello = new ActiveLinksPane();
            pannello .setText("<html>Clicca <a href=\"uno\">qui</a> 
    " +
                    " e poi <a href=\"due\">qui</a></html>");
            frame.setContentPane(new JScrollPane(pannello));
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            frame.setSize(200,200);
            frame.setLocation(100,100);
            frame.setVisible(true);
        }
    }

  10. #10
    Con netbeans puoi benissimo scrivere il codice a mano, basta non usare la modalita' proposta da netbeans (fai una nuova classe generica, gli fai estendere JFrame e te la scrivi come preferisci).
    Non ho capito questa storia... Hai presente che netbeans mi vieta di modificare il codice del jframe perche' e' quello che modifica lui con la GUI per creare i dialog? Ecco quello.

    E nel caso volessi passare degli argomenti alla funziione...? Non esiste qualcosa simile ad eval in PHP per eseguire del codice?
    ~Wakka~

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.