Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24

    [Java] Evidenziare risultato ricerca in una JTable

    Ciao a tutti,

    sono alle prese con una funzione di ricerca all'interno di una JTable. La mia applicazione dovrebbe evidenziare la parola ricercata all'interno della tabella, in pratica come la funzione trova(CTRL F) di qualunque applicazione.
    Il punto è proprio questo: come faccio ad evidenziare in una cella la parola ricercata?
    Spero di essere stata sufficientemente chiara.

    Ringrazio in anticipo per un eventuale aiuto
    Jas

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    con questo colori la cella selezionata , ma nn il testo

    selectionBackground

    http://java.sun.com/j2se/1.4.2/docs/...tionBackground

    in questo link c'è un package che ti può magari servire

    http://www.physci.org/codes/tame/

    questo è forse il link più utile c'è scritto come crearsi un proprio render
    http://forum.java.sun.com/thread.jsp...sageID=1067495

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24
    Grazie per i link.


  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24
    Sono riuscita a risolvere la lacuna.
    Ma ora ho un problema supplementare: se ho più elementi uguali nella tabella dovrebbero venir evidenziati tutti, ma al momento viene evidenziato solo l'ultimo elemento trovato dalla ricerca.
    Come si fa a far evidenziare tutti gli elementi corretti trovati?

    Grazie.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    posta il codice, cmq penso che dovrai farti restituire per ogni elemento trovato le coord della cella e poi mod il colore

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24
    Premetto che è molto semplice come tabella, ma lo scopo è utilizzare la funzione per una applicazione più grande.



    public class Table extends JFrame
    {

    private String[] colNames = {"Hostname", "Ramsize", "Update_Time"};

    private Date dayIn1 = (new GregorianCalendar(2002, 6, 17)).getTime(),
    dayIn2 = (new GregorianCalendar(2002, 6, 20)).getTime(),
    dayIn3 = (new GregorianCalendar(2002, 6, 30)).getTime();

    private Object[][] data = {{"swspc10", 512, dayIn1 },{"wgsbe-06", 1024, dayIn2},
    {"pcPersonal", 512, dayIn3},{"hti-02", 256, dayIn1}, {"hti-06",1024, dayIn3}};

    private JTable table;

    public Table()
    {
    final MyTableModel model = new MyTableModel(data, colNames);
    table = new JTable(model);

    // Setting the correct row and column dimension
    TableResizer.adjustRowHeight(table);
    TableResizer.adjustColumnWidths(table, 2);

    final JTextField word = new JTextField(10);
    JButton findButton = new JButton("Find");
    JPanel panel = new JPanel();
    panel.add(word);
    panel.add(findButton);
    add(panel, BorderLayout.SOUTH);

    add(new JScrollPane(table));

    findButton.addActionListener(new ActionListener()
    {

    public void actionPerformed(ActionEvent e)
    {

    String separators = (" " + "-" + "," + ":" + "." + "(" + "/" + "\\");
    String value = word.getText();
    int count = 0;

    for(int i=0; i<table.getRowCount();i++){
    for(int j=0; j<table.getColumnCount();j++){
    String cellValue = model.getValueAt(i,j).toString();
    //StringTokenizer
    StringTokenizer tokenizer = new StringTokenizer(cellValue, separators);
    while (tokenizer.hasMoreTokens()){
    String token = tokenizer.nextToken();


    /*System.out.println(cellValue);OK*/
    if (value.equalsIgnoreCase(token)){

    System.out.println(token);
    count ++;
    table.setRowSelectionInterval(i, i);
    table.setColumnSelectionInterval(j, j);

    //table.setSelectionForeground(Color.RED);
    //table.setFont(new Font("Arial", Font.BOLD, 12));

    }
    /*else{
    //System.out.println("No match found");

    }*/
    }
    }
    }
    System.out.println("Match found: " + count);


    }
    });

    }

    // Inner class: A default table model
    // ----------------------------------
    class MyTableModel extends DefaultTableModel
    {
    MyTableModel(Object[][] data, String[] colNames)
    {
    super(data, colNames);
    }

    public Class getColumnClass(int col)
    {
    // dataVector is a protected member of DefaultTableModel
    Vector v = (Vector)dataVector.elementAt(0);
    return v.elementAt(col).getClass();
    }

    public boolean isCellEditable(int row, int col)
    {
    Class colClass = getColumnClass(col);
    return colClass != ImageIcon.class && colClass != Date.class;
    }
    }

    /* class ValueRenderer extends DefaultTableCellRenderer{
    private Font font = new Font("Arial", Font.BOLD, 14);

    public void setValue(Object value){
    setFont(font);
    setBackground(Color.GREEN);
    }
    }
    */
    public static void main(String args[])
    {
    JFrame f = new Table();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.pack();
    f.setVisible(true);
    }
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    così com'è nn penso sia possibile evidenziare più righe, però ho trovato questo che ti sarà sicuramente utile

    http://www.devx.com/DevX/10MinuteSol...67/1763/page/2
    http://www.devx.com/DevX/10MinuteSolution/17167

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.