Jak w jTable zastosować ToolTips

0

Witam, mam w programie kilka tabel...Interesuje mnie szczególnie jedna, w której po najechaniu myszka na jakąś komórkę (Cell) obok strzałki myszy ma się wyświetlać jakiś tam tekst pobierany z bazy danych...W czym rzecz: nie wiem jak zastosować odpowiedni kod...Przeszukałem neta, jest dużo informacji ale nie mogę jakoś zastosować tego do mojego kodu....Oto fragment mojego kodu:

private void jPanel7ComponentShown(java.awt.event.ComponentEvent evt) {
zapytanie="SELECT * FROM L_godzin";
tModel=new Pobranie_tabel(jComboBox1).Pobierz_model(zapytanie, "L_godzin");
TableGodziny.setModel(tModel);
//TableGodziny.setToolTipText(zapytanie);
JTableHeader header = TableGodziny.getTableHeader();
header.setBackground(Color.lightGray);
ButtonUsun.setEnabled(true);
ButtonDodajRekord.setEnabled(true);
ButtonAktualizuj.setEnabled(true);
}

Tabela pobiera model w momencie gdy panel, na ktorym sie znajduje, jest wyświetlany...Pytanie czy w tym miejscu dopisać jakiś kod czy w klasie, w której pobierany jest model:

public DefaultTableModel Pobierz_model(String zapytanie, String tableName)
{
String query=zapytanie;
relacja=new String(tableName);
ResultSet rs = null;
DefaultTableModel tModel=null;

    try
    {
        rs = Polaczenie.conn.createStatement().executeQuery(query);
        ResultSetMetaData rsmd = rs.getMetaData();
        int colCount = rsmd.getColumnCount();

        String[] colHeaders = new String[colCount];
        tModel = new DefaultTableModel()
        {   
            @Override
            public boolean isCellEditable(int rowIndex, int columnIndex)
            {
                if(relacja.equals("Stanowisko"))
                {
                    if(columnIndex==0) return false;
                }
                else if(relacja.equals("Dzial"))
                {
                    if(columnIndex==0) return false;
                }
                else if(relacja.equals("Pracownik"))
                {
                    if(columnIndex==0) return false;
                }
                else if(relacja.equals("L_godzin"))
                {
                    if(columnIndex==0) return false;
                    if(columnIndex==1) return false;
                }
                return true;
            }
        };
        
        for(int i=0;i<colCount;i++)
        {
            colHeaders[i] = rsmd.getColumnName(i+1);
            combo_sortowanie.addItem(colHeaders[i]);
        }

        tModel.setColumnIdentifiers(colHeaders);

        while(rs.next())
        {
            Object[] obj = new Object[colCount];
            for(int i=0;i<colCount;i++)
            {
                obj[i] = rs.getObject(i+1);
            }

            tModel.addRow(obj);

        } 
    }
    catch(Exception ex)
    {
        JOptionPane.showMessageDialog(null,"Nie mozna pobrac danych z bazy: "+ex.getMessage(),"ERROR", JOptionPane.ERROR_MESSAGE);
    }
    return tModel;
}

}

Znalazłem na necie taki kod (sprawdzałem - działa):

public class CellToolTips{
JTable table;
public static void main(String[] args) {
new CellToolTips();
}

public CellToolTips(){
JFrame frame = new JFrame("Setting Tool Tips on Cells in a JTable!");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
String data[][] = {{"Vinod","MCA","Computer"},
{"Deepak","PGDCA","History"},
{"Ranjan","M.SC.","Biology"},
{"Radha","BCA","Computer"}};
String col[] = {"Name","Course","Subject"};
DefaultTableModel model = new DefaultTableModel(data,col);
table = new JTable(model){
public Component prepareRenderer(TableCellRenderer renderer,int row, int col) {
Component comp = super.prepareRenderer(renderer, row, col);
JComponent jcomp = (JComponent)comp;
if (comp == jcomp) {
jcomp.setToolTipText((String)getValueAt(row, col));
}
return comp;
}
};
JTableHeader header = table.getTableHeader();
header.setBackground(Color.yellow);
JScrollPane pane = new JScrollPane(table);
panel.add(pane);
frame.add(panel);
frame.setUndecorated(true);
frame.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);
frame.setSize(500,150);
frame.setVisible(true);
}
}

NIe wiem tylko gdzie zastosować te metode aby u mnie działała...Może ktoś pomóc??? Będę wdzięczny...

0

Post cały dzień bez żadnej odpowiedzi...Widzę, że nie ma mocnych na ten problem...

0

Generanie chodzi o to, że musisz przypisać renderera do kolumn swojej tabeli.

package tester;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;

/**
 * Klasa testująta tabele z tooltipami.
 *
 * @author pustak
 * @vertion 0.1.0
 */
public final class TooltipTester extends JFrame {
    
    /**
     * serialVersionUID.
     */
    private static final long serialVersionUID = 7603277139248048777L;

    /**
     * Tabela.
     */
    private JTable table;
    
    /**
     * Model tabeli.
     */
    private TableModel model;
    
    /**
     * Konstruktor.
     */
    public TooltipTester() {
        super("Tooltip tester");
        this.setSize(500, 400);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.initComponents();
        this.createLayout();
    }
    
    /**
     * Inicjuje komponenty.
     */
    private final void initComponents() {
        // tworze tabele
        this.table = new JTable();
        // tworze dane dla tabeli
        final Object[][] data = new String[][] {
                {"Ala ma kota", "a kot śmierdzi"},
                {"...", "ble"},
                {"cośtam", "cośtam..."},
        };
        // tworze nazwy kolumn
        final String[] columnNames = {
                "Kolumna nr 1","Kolumna nr 2"
        };
        // tworze model tabeli
        this.model = new DefaultTableModel(data, columnNames);
        // przypisuje model do tabeli
        this.table.setModel(this.model);
        // tworze renderara dla tabeli
        final TableCellRendererWithTooltip renderer = 
            new TableCellRendererWithTooltip();
        // przypisuje renderera dla kolumn tabeli
        for (int i = 0; i < this.table.getColumnCount(); i++) {
            this.table.getColumnModel().getColumn(i).setCellRenderer(renderer);
        }
    }
    
    /**
     * Tworzy layout.
     */
    private final void createLayout() {
        this.getContentPane().setLayout(new BorderLayout());
        // dodaje tabele w scrollu
        this.getContentPane().add(new JScrollPane(this.table), 
                BorderLayout.CENTER);
    }
    
    /**
     * Main.
     * 
     * @param args
     */
    public final static void main(final String[] args) {
        final TooltipTester tester = new TooltipTester();
        // odpalam okno
        tester.setVisible(true);
    }
}

/**
 * Klasa opisująca renderera tabeli z tooltipem.
 *
 * @author pustak
 * @vertion 0.1.0
 */
class TableCellRendererWithTooltip extends JLabel implements TableCellRenderer {

    /**
     * serialVersionUID.
     */
    private static final long serialVersionUID = -5451190771076289627L;
    
    /**
     * Konstruktor.
     */
    public TableCellRendererWithTooltip() {
        super();
        this.setOpaque(true);
    }
    
    /**
     * {@inheritDoc}
     */
    @Override
    public Component getTableCellRendererComponent(final JTable table, 
            final Object value,
            final boolean isSelected, 
            final boolean hasFocus, 
            final int row, 
            final int column) {
        // ustawiam kolory 
        if (isSelected) {
            this.setBackground(table.getSelectionBackground());
            this.setForeground(table.getSelectionForeground());
        } else {
            this.setBackground(row % 2 == 0 ? 
                    table.getBackground() : new Color(0xE2E8EB));
            this.setForeground(table.getForeground());
        }
        // utawiam tekst
        this.setText(value != null ? value.toString() : "");
        // ustawiam tooltipa
        this.setToolTipText("[" + row + ", " + column +"] " + this.getText());
        return this;
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1