amaranto87
21-03-2013, 16:36
Ciao a tutti,
è da un giorno che sono bloccato su un problema di visualizzazione e non riesco a capire a cosa è dovuto.
Praticamente ho un pannello all'interno del quale inserisco una griglia di JLabel. I label sono oggetti che ho personalizzato ed ho fatto l'override del metodo paintComponent.
Il problema è che quando lancio il programma viene visualizzato solo il primo dei label della griglia e non si vede altro.
Mi sapete dire il perchè? Grazie
Ecco il costruttore del mio JPanel
public SOMMapPanel(SOMMapModel smm) {
int rows = smm.getRows();
int cols = smm.getCols();
GridBagLayout layout = new GridBagLayout();
GridBagConstraints lim = new GridBagConstraints();
setLayout(layout);
nodes = new MapNodeJLabel[rows*cols];
// scandisco smm
// per ogni mapnode aggiungo il relativo componente (JLabel) al pannello
if(!smm.isEmpty()){
int i = 0;
for (MapNode<TemporalSeries> node : smm.getNodes()) {
nodes[i] = new MapNodeJLabel(node, i/rows, i%rows, smm);
lim.gridx = i%rows; //Colonna
lim.gridy = i/rows; //Riga
lim.weightx = 1;
lim.weighty = 1;
lim.fill = GridBagConstraints.BOTH;
lim.anchor = GridBagConstraints.CENTER;
layout.setConstraints(nodes[i], lim); //Associazione
add(nodes[i]); //Inserimento
i++;
}
}
}
Questo invece è il metodo paintComponent del mio label
@Override
protected void paintComponent(Graphics arg0) {
super.paintComponent(arg0);
Graphics2D g = (Graphics2D) arg0;
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
double radius;
Color c = Color.getHSBColor(mapNodeToColor(node, smm),0.9f, 0.9f);
g.setColor(c);
this.setSize(80, 80);
Rectangle bounds = this.getBounds();
double cx = bounds.getCenterX();
double cy = bounds.getCenterY();
if(node.getNumObjects()>0){
radius = (int) (NODE_RADIUS*Math.log10(node.getNumObjects())/Math.log10(smm.getMaxNodeSize()));
g.fillOval((int)(cx-radius), (int)(cy-radius), (int)radius*2, (int)radius*2);
g.setColor(Color.black);
drawNodeStatistics(g,c);
drawNodeText(g);
}else{
radius = 1;
g.fillOval((int)(cx-radius), (int)(cy-radius), (int)radius*2, (int)radius*2);
}
}
è da un giorno che sono bloccato su un problema di visualizzazione e non riesco a capire a cosa è dovuto.
Praticamente ho un pannello all'interno del quale inserisco una griglia di JLabel. I label sono oggetti che ho personalizzato ed ho fatto l'override del metodo paintComponent.
Il problema è che quando lancio il programma viene visualizzato solo il primo dei label della griglia e non si vede altro.
Mi sapete dire il perchè? Grazie
Ecco il costruttore del mio JPanel
public SOMMapPanel(SOMMapModel smm) {
int rows = smm.getRows();
int cols = smm.getCols();
GridBagLayout layout = new GridBagLayout();
GridBagConstraints lim = new GridBagConstraints();
setLayout(layout);
nodes = new MapNodeJLabel[rows*cols];
// scandisco smm
// per ogni mapnode aggiungo il relativo componente (JLabel) al pannello
if(!smm.isEmpty()){
int i = 0;
for (MapNode<TemporalSeries> node : smm.getNodes()) {
nodes[i] = new MapNodeJLabel(node, i/rows, i%rows, smm);
lim.gridx = i%rows; //Colonna
lim.gridy = i/rows; //Riga
lim.weightx = 1;
lim.weighty = 1;
lim.fill = GridBagConstraints.BOTH;
lim.anchor = GridBagConstraints.CENTER;
layout.setConstraints(nodes[i], lim); //Associazione
add(nodes[i]); //Inserimento
i++;
}
}
}
Questo invece è il metodo paintComponent del mio label
@Override
protected void paintComponent(Graphics arg0) {
super.paintComponent(arg0);
Graphics2D g = (Graphics2D) arg0;
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
double radius;
Color c = Color.getHSBColor(mapNodeToColor(node, smm),0.9f, 0.9f);
g.setColor(c);
this.setSize(80, 80);
Rectangle bounds = this.getBounds();
double cx = bounds.getCenterX();
double cy = bounds.getCenterY();
if(node.getNumObjects()>0){
radius = (int) (NODE_RADIUS*Math.log10(node.getNumObjects())/Math.log10(smm.getMaxNodeSize()));
g.fillOval((int)(cx-radius), (int)(cy-radius), (int)radius*2, (int)radius*2);
g.setColor(Color.black);
drawNodeStatistics(g,c);
drawNodeText(g);
}else{
radius = 1;
g.fillOval((int)(cx-radius), (int)(cy-radius), (int)radius*2, (int)radius*2);
}
}