Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
467 views
in Technique[技术] by (71.8m points)

java - how to get the row and the column in a JTable when the cursor is pointed at a specific row?

I am creating a table that contains a basic data , here is my frame enter image description here

when i click that row , it will popUp a new frame, that contains all data , it works well , i can properly get the row and the column when i click a row ,

enter image description here

but here is what i want to do :

when i set the cursor over the table row , it will automatically get the row and the column of that data on the table , and i want to display that data's picture , just like on the fb , when you set your cursor on a profile , after 2 secs, it will display the profile of that user. please help , im just a newbie :)

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

What you can do is override the prepareRenderer method of the JTable and set a tool tip for each cell. Then use some html for the tool tip as seen in this answer from AndrewThompson

I use this image this url http://i.stack.imgur.com/Bbnyg.jpg from this site (this question), but you will probably want to use a resource from your system or class path and use toUri().toUrl() to create the url. In any case, the html needs to consist of a URL in the <img src=. You can switch them based on the row/column value.

enter image description here

Here is the example.

enter image description here

import java.awt.Component;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

public class TestTableTooltip {

    String html
            = "<html><body>"
            + "<img src='"
            + "http://i.stack.imgur.com/Bbnyg.jpg"
            + "' width=160 height=120> ";

    public TestTableTooltip() {
        String[] cols = {"COL", "COL", "COL"};
        String[][] data = {
            {"Hello", "Hello", "Hello"},
            {"Hello", "Hello", "Hello"},
            {"Hello", "Hello", "Hello"}
        };
        DefaultTableModel model = new DefaultTableModel(data, cols);
        JTable table = new JTable(model) {
            public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
                Component c = super.prepareRenderer(renderer, row, column);
                if (c instanceof JComponent) {
                    JComponent jc = (JComponent) c;
                    jc.setToolTipText(html + "<br/>"
                        + getValueAt(row, column).toString()
                        + ":  row, col (" + row + ", " + column + ")"
                        + "</body></html>");
                }
                return c;
            }
        };

        JFrame frame = new JFrame();
        frame.add(new JScrollPane(table));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new TestTableTooltip();
            }
        });
    }
}

UPDATE

You can get a url from a resource (in your class path) like this

  URL url = getClass().getResource("/path/to/image.png");
  final String html
        = "<html><body>"
        + "<img src='"
        + url
        + "' width=150 height=150> ";

If it is a file from the file system, you can do this

  URL url = new File("path/to/image.png").toURI().toURL();

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...