私はJavaで病院プロジェクトを作成しています.SQLデータベースからJTable
病院名と病院の画像リンクを取得しています。"Click to see more"
私の問題は、データがデータベースからテーブルに正常にフェッチされることですが、テーブルセルにあるリンクをクリックできません。
リンクをアクティブにする方法は?
私はJavaで病院プロジェクトを作成しています.SQLデータベースからJTable
病院名と病院の画像リンクを取得しています。"Click to see more"
私の問題は、データがデータベースからテーブルに正常にフェッチされることですが、テーブルセルにあるリンクをクリックできません。
リンクをアクティブにする方法は?
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);
マウスを 1 回クリックするだけでアクティブ化できるメソッドを作成することもTableCellEditor
できます。isCellEditable
率直に言って、これは面倒です。
MouseListener
または、 をテーブルに直接アタッチして、mouseClicked
イベントを監視することもできます。
クリックされたイベントでは、getSelectedColumnとgetSelectedRowを使用して、目的の列をクリックしたかどうかを判断し、getValueAtを使用して選択したセルからリンク値を取得する必要があります。
テーブルがソートされているか、列が最初の順序でなくなっている可能性があることを考慮する必要があります (ユーザーが列を移動した可能性があります)。
次に、 convertColumnIndexToViewとconvertRowIndexToModelが必要です
シンプル :D
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 */ }
}