PDA

Visualizza la versione completa : [java]renderer


giuseppe500
25-02-2005, 15:00
Ciao a tutti come sempre.
Nel mio studio di java(tuttora purtroppo sto' lavorando in c#)
mi sono fermato un attimo a questo termine(renderer),l'ho visto in alcuni esempi trovati su internet ad es il successivo:
public class PushableHeaderExample extends JPanel {

public PushableHeaderExample(){
setLayout(new BorderLayout());
String[] headerStr = {"Push","me","here"};

DefaultTableModel dm = new DefaultTableModel(headerStr, 4);
JTable table = new JTable(dm);



// ButtonHeaderRenderer renderer = new ButtonHeaderRenderer();
ButtonHeaderRenderer renderer=new ButtonHeaderRenderer();
TableColumnModel model = table.getColumnModel();
int n = headerStr.length;
for (int i=0;i<n;i++) {

model.getColumn(i).setHeaderRenderer (renderer);

}

JTableHeader header = table.getTableHeader();
// header.addMouseListener(new HeaderListener(header,renderer));
JScrollPane pane = new JScrollPane(table);
add(pane, BorderLayout.CENTER);
}

}
class HeaderListener extends MouseAdapter {
JTableHeader header;
ButtonHeaderRenderer renderer;

HeaderListener(JTableHeader header,ButtonHeaderRenderer renderer) {
this.header = header;
this.renderer = renderer;
}

public void mousePressed(MouseEvent e) {
int col = header.columnAtPoint(e.getPoint());
renderer.setPressedColumn(col);
header.repaint();

System.out.println("Ouch! " + col);
}

public void mouseReleased(MouseEvent e) {
int col = header.columnAtPoint(e.getPoint());
renderer.setPressedColumn(-1); // clear
header.repaint();
}
}

class ButtonHeaderRenderer extends JButton implements TableCellRenderer {
int pushedColumn;

public ButtonHeaderRenderer() {
pushedColumn = -1;
setMargin(new Insets(0,0,0,0));
}

public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
setText((value ==null) ? "" : value.toString());
boolean isPressed = (column == pushedColumn);
getModel().setPressed(isPressed);
getModel().setArmed(isPressed);
return this;
}
questo pezzo di codice:

ButtonHeaderRenderer renderer=new ButtonHeaderRenderer();
model.getColumn(i).setHeaderRenderer (renderer);

penso sia la chiave ,cosa fa' il renderer?crea un oggetto non soltanto lo disegna?.
Io vorrei inserire nell'header sia il jbutton(come adesso)sia una jtextarea per eseguire filtri.
premetto che ho cercato sul forum ma ho trovato poco o niente,io vorrei piu' che altro capire ,se avete dei link(soprattutto in italiano sono benvenuti, una breve spiegazione , ancora meglio.
Ciao.

giuseppe500
26-02-2005, 10:07
leggendo qua e la penso di aver capito,il renderer disegna solamente il controllo e, essendo pulsanti lo disegna nello stato on e nello stato off a seconda se viene cliccato o meno.
cosi?

Loading