Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> гиперсылка в JTable 
:(
    Опции темы
TiR3ks
Дата 12.8.2010, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 13.8.2007

Репутация: нет
Всего: нет



Подскажите, как можно сделать текст в колонке link ввиде гиперссылок?
код рабочий:
Код

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;

class jTable {

        JTable jtab;

        String[] headings = { "name", "link" };

        Object[][] data = {
                        { "test", "c:\\test.txt" },
                        { "test2", "c:\\test2.txt" },
                        { "test3", "c:\\test3.txt" },
                        { "test4", "c:\\test4.txt" },
                        };

        jTable (){

        JFrame jfrm = new JFrame("JTable");

        jfrm.getContentPane().setLayout(new FlowLayout());

        jfrm.setBounds(400, 350, 500, 160);

        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        jtab = new JTable(data, headings);

        JScrollPane jscrl = new JScrollPane(jtab);

        jtab.setPreferredScrollableViewportSize(new Dimension(480, 80));

        jfrm.getContentPane().add(jscrl);

        jfrm.setVisible(true);

        }

        public static void main(String[] args){

        SwingUtilities.invokeLater(new Runnable(){public void run(){new jTable();}});

        }
}

PM MAIL   Вверх
jk1
Дата 12.8.2010, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



При этом оно будет по клику открываться в браузере. Только не забудьте добавить к jtab модификатор final.
Код

 jtab.addMouseListener(new MouseAdapter() {
                @Override
                public void mousePressed(MouseEvent e) {
                    if (jtab.getSelectedColumn()==1) {
                        try {
                            String url = jtab.getValueAt(jtab.getSelectedRow(), jtab.getSelectedColumn()).toString();
                            Desktop.getDesktop().browse(new URI(url));
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        } catch (URISyntaxException e1) {
                            e1.printStackTrace();  
                        }
                    }

                }
            });



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
TiR3ks
Дата 12.8.2010, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 13.8.2007

Репутация: нет
Всего: нет



спасибо.

а, как применить это в моём случае?
у меня вот , что получается, когда жму на ячейки в колонке link:
Код

java.net.URISyntaxException: Illegal character in opaque part at index 2: c:\test.txt
    at java.net.URI$Parser.fail(URI.java:2825)
    at java.net.URI$Parser.checkChars(URI.java:2998)
    at java.net.URI$Parser.parse(URI.java:3035)
    at java.net.URI.<init>(URI.java:595)
    at jTable$1.mousePressed(jTable.java:33)
    at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:280)
    at java.awt.Component.processMouseEvent(Component.java:6105)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    at java.awt.Component.processEvent(Component.java:5873)
    at java.awt.Container.processEvent(Container.java:2105)
    at java.awt.Component.dispatchEventImpl(Component.java:4469)
    at java.awt.Container.dispatchEventImpl(Container.java:2163)
    at java.awt.Component.dispatchEvent(Component.java:4295)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4122)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)
    at java.awt.Container.dispatchEventImpl(Container.java:2149)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4295)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:604)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)

и вот ещё:
Код

java.io.IOException: Failed to show URI:/home/slaine/Desktop/0100GS-GettingStarted-Ru.pdf
    at sun.awt.X11.XDesktopPeer.launch(XDesktopPeer.java:93)
    at sun.awt.X11.XDesktopPeer.browse(XDesktopPeer.java:82)
    at java.awt.Desktop.browse(Desktop.java:386)
    at jTable$1.mousePressed(jTable.java:33)
    at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:280)
    at java.awt.Component.processMouseEvent(Component.java:6105)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    at java.awt.Component.processEvent(Component.java:5873)
    at java.awt.Container.processEvent(Container.java:2105)
    at java.awt.Component.dispatchEventImpl(Component.java:4469)
    at java.awt.Container.dispatchEventImpl(Container.java:2163)
    at java.awt.Component.dispatchEvent(Component.java:4295)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4122)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)
    at java.awt.Container.dispatchEventImpl(Container.java:2149)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4295)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:604)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)



вот, как я это записал:
Код

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.*;
import java.net.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
class jTable {
        JTable jtab;
        String[] headings = { "name", "link" };
        Object[][] data = {
                        { "test", "c:\\test.txt" },
                        { "test2", "c:\\test2.txt" },
                        { "test3", "c:\\test3.txt" },
                        { "test4", "c:\\test4.txt" },
                        };
        jTable (){
        JFrame jfrm = new JFrame("JTable");
        jfrm.getContentPane().setLayout(new FlowLayout());
        jfrm.setBounds(400, 350, 500, 160);
        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jtab = new JTable(data, headings);
        JScrollPane jscrl = new JScrollPane(jtab);
        jtab.setPreferredScrollableViewportSize(new Dimension(480, 80));

     jtab.addMouseListener(new MouseAdapter() {
                @Override
                public void mousePressed(MouseEvent e) {
                    if (jtab.getSelectedColumn()==1) {
                        try {
                            String url = jtab.getValueAt(jtab.getSelectedRow(), jtab.getSelectedColumn()).toString();
                            Desktop.getDesktop().browse(new URI(url));
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        } catch (URISyntaxException e1) {
                            e1.printStackTrace();  
                        }
                    }
                }
            });

        jfrm.getContentPane().add(jscrl);
        jfrm.setVisible(true);
        }
        public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable(){public void run(){new jTable();}});
        }
}



Это сообщение отредактировал(а) TiR3ks - 12.8.2010, 15:35
PM MAIL   Вверх
jk1
Дата 12.8.2010, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



А как по-вашему, c:\test.txt это валидная гиперссылка?

И да, под иксами способ может не работать. Когда сам последний раз использовал Desktop он стабильно работал под виндой или под Gnome. Так что указывайте операционную систему под которой это предполагается запускать.

Это сообщение отредактировал(а) jk1 - 12.8.2010, 15:46


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
TiR3ks
Дата 12.8.2010, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 13.8.2007

Репутация: нет
Всего: нет



Цитата(jk1 @ 12.8.2010,  15:41)
А как по-вашему, c:\test.txt это валидная гиперссылка?

И да, под иксами способ может не работать. Когда сам последний раз использовал Desktop он стабильно работал под виндой или под Gnome. Так что указывайте операционную систему под которой это предполагается запускать.


под иксами работает, pdf,odt открываются в ассоциативных программах.

в windows пишет те же предупреждения, даже если ссылку указать так: file:///C:\\test.txt

Это сообщение отредактировал(а) TiR3ks - 12.8.2010, 16:08
PM MAIL   Вверх
jk1
Дата 12.8.2010, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



а если так:

C:/test.txt

По крайней мере у меня работает 


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
TiR3ks
Дата 12.8.2010, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 13.8.2007

Репутация: нет
Всего: нет



Цитата(jk1 @ 12.8.2010,  16:47)
а если так:

C:/test.txt


так работает, мерси.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0683 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.