私の質問は、JXTable 列 (1 つまたは特定の列のみ) からハイパーリンクを作成して、デフォルトのデスクトップ Web ブラウザーの「_blank」リンクのように動作させるにはどうすればよいかということです。
JXTable と DefaultTableModel を使用し、sqlite データベースからデータを呼び出します。私はインターネット、グーグル、[...] で調査を行い、次のような多くの情報を見つけました。
- MouseListener を JXTable に登録します。
- MouseEvent からポイント オブジェクトを生成します。
- getValueAt を介してテキストを取得します
***注: 列にはセルごとにリンクが 1 つだけあり、テキストはなく、リンクだけです。
今のところ、このコードを実装して、セルをダブルクリックするアクションを作成しました。この例のように、デフォルトのブラウザーで開く列のハイパーリンクを実装するのを誰かが手伝ってくれます(ただし、データがデータベースから呼び出されないため、適応する方法がわかりません)。
Table_Employee.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
JXTable target = (JXTable)e.getSource();
int row = target.getSelectedRow();
int column = target.getSelectedColumn();
JFrame newFrame = new JFrame(); //I want to open an distinc link
newFrame.setTitle("Detail Screen"); //for every cell along one column
newFrame.setVisible(true); //in the web browser, not a frame.
}
}
});
EDIT 1 @Kleopatra の EDIT 2 のコードには、アプリケーションにいくつかの問題があります。また、次のコードのような別の試みを行いました。最初のクリックが関係しているときにリンクが表示されますが、反応しません (ブラウザが開いていません)。@Kleopatra、あなたの提案について詳しく教えてください。なぜなら、そのコードを入れようとすると、IDE がhyperlinkColumnを認識しないからです。
Table_Employee.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 1) {
JXTable target = (JXTable)e.getSource();
int row = target.getSelectedRow();
int column = target.getSelectedColumn();
AbstractHyperlinkAction<Object> simpleAction = new AbstractHyperlinkAction<Object>(null) {
public void actionPerformed(ActionEvent e) {
//open the browser event?
}
};
TableCellRenderer renderer = new DefaultTableRenderer(
new HyperlinkProvider(simpleAction));
Table_Employee.getColumnExt(2).setEditable(false);
Table_Employee.getColumnExt(2).setCellRenderer(renderer);
}
}
});