Возможно ли создать выбираемую гиперссылку с базовыми компонентами Swing в Java? - PullRequest
5 голосов
/ 09 апреля 2011

Я пытаюсь добавить гиперссылку на JPanel. Я хотел бы сделать его текст синим (и подчеркнут), и ссылка должна быть выбираемой (чтобы скопировать некоторую ее часть). Поэтому я попытался использовать JLabel: да, это позволяет написать что-то [ужасное], например:

someLabel.setText("<html><font color=\"#0000ff\"><u>http://example.com</u></font></html>");

Но, к сожалению, JLabel не позволяет выделять текст. Я также пытался использовать JTextField, но, напротив, он не позволяет использовать HTML / CSS в своих полях.

Итак, существует ли какой-либо способ создания гиперссылки (с надлежащей индикацией) с базовыми компонентами Swing, которая позволит выбрать [и скопировать] ее часть, или я должен попытаться использовать некоторые сторонние компоненты? Спасибо.

Ответы [ 4 ]

5 голосов
/ 09 апреля 2011

Вы можете отображать содержимое HTML в недоступном для редактирования JEditorPane. Это выбирается, и вы можете сделать ссылки функциональными с помощью HyperlinkListener:

    JEditorPane content = new JEditorPane();
    content.setContentType("text/html");
    content.setEditable(false);
    content.setText("<html><a href=\"http://stackoverflow.com\">Link</a></html>"));
    content.addHyperlinkListener(new HyperlinkListener() {
        @Override
        public void hyperlinkUpdate(HyperlinkEvent e) {
            if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                try {
                    Desktop.getDesktop().browse(e.getURL().toURI());
                } catch (Exception e1) {
                    Logger.getLogger(getClass()).error(
                            "Error opening link " + e.getURL(), e1);
                }
            }
        }
    });
1 голос
/ 09 апреля 2011

Вот как вы можете создать JLabel с гиперссылкой, а затем просто добавить его в свою Jpanel:

public HyperLinkLabel()  
{  
JPanel p = new JPanel();  
final String strURL = "http://www.yahoo.com";  
final JLabel label = new JLabel("<html><a href=\" " + strURL + "\"> click </a></html>");  

final JEditorPane htmlPane = new JEditorPane();  


p.add(label);  

getContentPane().add(BorderLayout.NORTH, p);  
getContentPane().add(BorderLayout.CENTER, new JScrollPane(htmlPane));  
setBounds(20,200, 500,500);  

label.addMouseListener(new MouseAdapter() {  
   public void mouseEntered(MouseEvent me) {  
      label.setCursor(new Cursor(Cursor.HAND_CURSOR));  
   }  
   public void mouseExited(MouseEvent me) {  
      label.setCursor(Cursor.getDefaultCursor());  
   }  
   public void mouseClicked(MouseEvent me)  
   {  
      System.out.println("Clicked on Label...");  
      try {  
           htmlPane.setPage(new URL(strURL));  
        }  
        catch(Exception e) {  
           System.out.println(e);  
        }  
   }  
  });  
1 голос
/ 09 апреля 2011
0 голосов
/ 09 апреля 2011

Вы должны создать пользовательский Jlabel [extend Jlabel] и написать MouseListener для JLabel.Ваш прослушиватель мыши должен направлять пользователя на ссылку, когда пользователь нажимает на пользовательский JLabel.Событие мыши [в основном метод интерфейса MouseListener, где вы должны написать код перенаправления], которое вы ищете, это mouseClicked.

...