3

私はJavaで病院プロジェクトを作成しています.SQLデータベースからJTable病院名と病院の画像リンクを取得しています。"Click to see more"私の問題は、データがデータベースからテーブルに正常にフェッチされることですが、テーブルセルにあるリンクをクリックできません。

リンクをアクティブにする方法は?

4

4 に答える 4

8

JXTable ( SwingX のクラス) の使用を検討してください:セルの値に基づいて任意のアクションを実行するように構成できるハイパーリンク レンダラーをサポートします。

JXTable table = new JXTable(myModel);
AbstractHyperlinkAction<Object> simpleAction = new AbstractHyperlinkAction<Object>(null) {

    public void actionPerformed(ActionEvent e) {
        // here goes what you want to do on activating the hyperlink
        //LOG.info("hit: " + getTarget());
    }

};
TableCellRenderer renderer = new DefaultTableRenderer(
    new HyperlinkProvider(simpleAction));
table.getColumnExt(0).setEditable(false);
table.getColumnExt(0).setCellRenderer(renderer);
于 2012-08-11T07:44:21.683 に答える
6

マウスを 1 回クリックするだけでアクティブ化できるメソッドを作成することもTableCellEditorできます。isCellEditable率直に言って、これは面倒です。

MouseListenerまたは、 をテーブルに直接アタッチして、mouseClickedイベントを監視することもできます。

クリックされたイベントでは、getSelectedColumngetSelectedRowを使用して、目的の列をクリックしたかどうかを判断し、getValueAtを使用して選択したセルからリンク値を取得する必要があります。

テーブルがソートされているか、列が最初の順序でなくなっている可能性があることを考慮する必要があります (ユーザーが列を移動した可能性があります)。

次に、 convertColumnIndexToViewconvertRowIndexToModelが必要です

シンプル :D

于 2012-08-11T07:27:35.367 に答える
4

MadProgrammer が示唆するように、外部ライブラリを回避する方が良い方法だと思いますが、swingx はまだ純粋な Java だと思います。とにかく、私は mouseClicked リスナーを使用してから、この質問How to add hyperlink in JLabel で説明されている方法で uri を開きます。

JTable table = new JTable();

table.addMouseListener(new MouseAdapter() {
  public void mouseClicked(MouseEvent e) {

        int row = table.getSelectedRow();
        int col = table.getSelectedColumn();

        //build your address / link

        URI uri = new URI("http: your link here");

        //see below
        open(uri);
      }
    });

//Then elsewhere as from the McDowell answer
private static void open(URI uri) {
  if (Desktop.isDesktopSupported()) {
    try {
       Desktop.getDesktop().browse(uri);
      } catch (IOException e) { /* TODO: error handling */ }
   } else { /* TODO: error handling */ }
 }
于 2013-11-26T20:39:46.463 に答える