czy mozna uzyc w jtextarea hiperłaczy lub czegos podobnego?

0

witam

czy jest mozliowsc uzycia hiperłaczy w jtextarea. tzn fajnie by bylo jakbym np klikajac w polu na jakis wyraz np
''telefon" przenosilo by mnie w aplecie z zakladkami do zakladki telefon?? lub czy mozna to zrobic w jakis inny sposob??

prosze o odpowiedz/pomoc

0

JEditorPane z podpiętym HyperlinkListener

0

A tu masz przykład:

import java.io.IOException;
import java.net.URL;

import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.Document;

class ActivatedHyperlinkListener implements HyperlinkListener {
  JEditorPane editorPane;

  public ActivatedHyperlinkListener(JEditorPane editorPane) {
    this.editorPane = editorPane;
  }

  public void hyperlinkUpdate(HyperlinkEvent hyperlinkEvent) {
    HyperlinkEvent.EventType type = hyperlinkEvent.getEventType();
    final URL url = hyperlinkEvent.getURL();
    if (type == HyperlinkEvent.EventType.ENTERED) {
      System.out.println("URL: " + url);
    } else if (type == HyperlinkEvent.EventType.ACTIVATED) {
      System.out.println("Activated");

      Document doc = editorPane.getDocument();
      try {
        editorPane.setPage(url);
      } catch (IOException ioException) {
        System.out.println("Error following link, Invalid link");
        editorPane.setDocument(doc);
      }
    }
  }
}

public class EditorPaneSample {
  public static void main(String args[]) {
    JFrame frame = new JFrame("EditorPane Example");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    try {
      JEditorPane editorPane = new JEditorPane("http://www.google.com");
      editorPane.setEditable(false);

      HyperlinkListener hyperlinkListener = new ActivatedHyperlinkListener(editorPane);
      editorPane.addHyperlinkListener(hyperlinkListener);
      JScrollPane scrollPane = new JScrollPane(editorPane);
      frame.add(scrollPane);
    } catch (IOException e) {
      System.err.println("Unable to load: " + e);
    }

    frame.setSize(640, 480);
    frame.setVisible(true);
  }
}

Źródło: http://www.java2s.com/Tutorial/Java/0260__Swing-Event/HyperlinkListenerExample.htm

0

Odświeżam temat, bo wydaje mi się że czegoś takiego szukam ;)

Czy dobrze rozumiem, że kod z poprzedniego postu pozwoli w aplikacji otworzyć stronę? Właśnie takiego rozwiązania szukam.

(Piszę aplikacje desktop-ową w NetBeans.)

0

Dobrze rozumiesz. Jeżeli jesteś zainteresowany to mogę ci podrzucić klasę do przeglądania plików html, która posiada JToolBar z przyciskami do nawigacji.

0
bogdans napisał(a)

Dobrze rozumiesz. Jeżeli jesteś zainteresowany to mogę ci podrzucić klasę do przeglądania plików html, która posiada JToolBar z przyciskami do nawigacji.

Nie ukrywam że bardzo by mi to pomogło, także jeśli możesz to poproszę.

0

W ten sposób nie uzyskasz pełnoprawnej przeglądarki - nie ma obsługi JavaScript-u, nie wszystkie "nowości" są zaimplementowane. To się nadaje do oglądania prostych stron. Takie coś ci wystarcza ?
Typowe zastosowanie to wyświetlenie strony z helpem do programu.

0

Wydaje mi się że tak, potrzebuję podgląd prostych szablonów w html-u, na pewno bez javascript, chyba nawet bez css_ów.

0

Typowe użycie, w konstruktorze

 helpPanel=new HelpHtml(...);

w obsłudze zdarzenia

if(helpPanel.isVisible())
     helpPanel.setExtendedState(NORMAL);
else
     helpPanel.setVisible(true);

Kod klasy:

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;

public class HelpHtml extends JFrame implements HyperlinkListener,ActionListener
{
    private JEditorPane ep=new JEditorPane();
    private JButton back;
    private JButton forward;
    private JButton home;
    private JButton refresh;
    private ArrayList<URL> urls=new ArrayList<URL>();
    private int currentUrl=0;
    private URL url=null;
    private String subdirectory="images";
    private boolean ok=true;
    //------------------------
    public HelpHtml(String file,String title,Dimension d,boolean navigationBar,String subdirectory,Component c)
    {
        super(title);
        this.subdirectory=subdirectory;
        String helpFile=System.getProperty("currentUser.dir",".")+System.getProperty("file.separator","\\")+file;
        File f=new File(helpFile);
        if(!f.exists())
        {
            ok=false;
        }
        if(ok)
        {
            try
            {
                url=new URL("file:"+helpFile);
            }
            catch (Exception e)
            {
                My.say(e.getMessage(),c);
                ok=false;
            }
        }
        if(ok)
        {
            urls.add(url);
            setLayout(new BorderLayout(2,2));
            ep.setEditable(false);
            ep.addHyperlinkListener(this);
            try
            {
                ep.setPage(url);
            }
            catch (Exception e)
            {
            }
            JScrollPane sp=new JScrollPane(ep);
            sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            sp.setPreferredSize(d);
            ep.setDocument((HTMLDocument)ep.getDocument());
            add(sp,"Center");
            if(navigationBar)
            {
                setToolBar();
            }
            pack();
            setVisible(false);
        }    
    }
    //------------------------
    public HelpHtml(URL url,String title,Dimension d,boolean navigationBar)
    {
        super(title);
        this.url=url;
        urls.add(url);
        setLayout(new BorderLayout(2,2));
        ep.setEditable(false);
        ep.addHyperlinkListener(this);
        try
        {
            ep.setPage(url);
        }
        catch (Exception e)
        {
        }
        JScrollPane sp=new JScrollPane(ep);
        sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        sp.setPreferredSize(d);
        ep.setDocument((HTMLDocument)ep.getDocument());
        add(sp,"Center");
        if(navigationBar)
        {
            setToolBar();
        }
        pack();
        setVisible(false);
    }
    //---------------------------
    public HelpHtml(URL url,String title,Dimension d)
    {
        this(url,title,d,true);
    }
    //---------------------------
    public HelpHtml(URL url,String title)
    {
        this(url,title,new Dimension(640,480),true);
    }
    //---------------------------
    public HelpHtml(URL url)
    {
        this(url,"Objaśnienia",new Dimension(640,480),true);
    }
    //---------------------------
    private void setToolBar()
    {
        back=new JButton(new ImageIcon(subdirectory+"/Back.gif"));
        forward=new JButton(new ImageIcon(subdirectory+"/Forward.gif"));
        home=new JButton(new ImageIcon(subdirectory+"/Home.gif"));
        refresh=new JButton(new ImageIcon(subdirectory+"/Refresh.gif"));

        JToolBar tb=new JToolBar();
        back.setToolTipText("Wstecz");
        back.addActionListener(this);
        back.setEnabled(false);
        tb.add(back);

        forward.setToolTipText("Naprzód");
        forward.addActionListener(this);
        forward.setEnabled(false);
        tb.add(forward);

        home.setToolTipText(url.toString());
        home.addActionListener(this);
        home.setEnabled(false);
        tb.add(home);

        refresh.setToolTipText("Odświeżenie");
        refresh.addActionListener(this);
        refresh.setEnabled(true);
        tb.add(refresh);

        add(tb,"North");
    }
    //---------------------------
    public boolean isOk()
    {
        return ok;
    }
    //---------------------------
    public void hyperlinkUpdate(HyperlinkEvent e)
    {
        if (e.getEventType()==HyperlinkEvent.EventType.ACTIVATED)
        {
            if (e instanceof HTMLFrameHyperlinkEvent)
            {
                HTMLFrameHyperlinkEvent evt=(HTMLFrameHyperlinkEvent)e;
                HTMLDocument doc=(HTMLDocument)ep.getDocument();
                doc.processHTMLFrameHyperlinkEvent(evt);
            }
            else
            {
                try
            {
                    URL newUrl=e.getURL();
                    ep.setPage(newUrl);

                    if(currentUrl==urls.size()-1)
                    {
                        urls.add(newUrl);
                        currentUrl++;
                        setButtons();
                        return;
                    }
                    if(newUrl.equals(urls.get(currentUrl+1)))
                    {
                        currentUrl++;
                        setButtons();
                        return;
                    }
                    for(int i=currentUrl;i<urls.size();i++)
                    {
                        if(i>0)
                        {
                            urls.remove(i);
                        }
                    }
                    urls.add(newUrl);
                    currentUrl++;
                    setButtons();
                }
                catch (Throwable t)
                {
                    My.showStack(t,10);
                }
            }
        }
    }
    //------------------------
    public void actionPerformed(ActionEvent ae)
    {
        JButton src=(JButton)ae.getSource();
        if(src==back)
        {
            try
            {
                ep.setPage(urls.get(currentUrl-1));
                currentUrl--;
                setButtons();
                return;
            }
            catch (Throwable t)
            {
                My.showStack(t,10);
            }
        }
        if(src==forward)
        {
            try
            {
                ep.setPage(urls.get(currentUrl+1));
                currentUrl++;
                setButtons();
                return;
            }
            catch (Throwable t)
            {
                My.showStack(t,10);
            }
        }
        if(src==home)
        {
            try
            {
                ep.setPage(url);
                currentUrl=0;
                setButtons();
            }
            catch (Throwable t)
            {
                My.showStack(t,10);
            }
        }
        if(src==refresh)
        {
            try
            {
                Document doc=ep.getDocument();
                doc.putProperty(Document.StreamDescriptionProperty,null);
                ep.setPage(urls.get(currentUrl));
                setButtons();
            }
            catch (Throwable t)
            {
                My.showStack(t,10);
            }
        }
    }
    //------------------------
    private void setButtons()
    {
        if(urls.size()<=1)
        {
            back.setEnabled(false);
            home.setEnabled(false);
            forward.setEnabled(false);
        }
        else
        {
            if(currentUrl==0)
            {
                back.setEnabled(false);
                home.setEnabled(false);
                forward.setEnabled(true);
                return;
            }
            if(currentUrl==urls.size()-1)
            {
                back.setEnabled(true);
                home.setEnabled(true);
                forward.setEnabled(false);
                return;
            }
            back.setEnabled(true);
            home.setEnabled(true);
            forward.setEnabled(false);
        }
    }
}

Wywołania metod klasy My zamień na swoją ulubioną obsługę wyjątków.
Program korzysta z czterech ikonek, możesz je pobrać stąd http://atos.wmid.amu.edu.pl/~bogdan/images/resources.zip</url></url>

0

Dziękuje, zaraz biorę się za implementacje tego w moim programie ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1