andbin te l'avevo detto che era un codice orientativo, forse non mi ero espresso bene: qll che intendevo era quale metodo mi permetteva di disegnare un rettangolo che avesse come vertici dei float
Cmq adesso ho risolto e il tutto si comporta bene secondo le mie aspettative anzi posto il codice così se magari serve a qualcun'altro...
codice:
package chunkbar;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.geom.Rectangle2D;
import java.util.BitSet;
import javax.swing.JComponent;
public class ChunkBar extends JComponent {
private int numOfChunks;
private BitSet chunks;
private int x;
private int y;
private int width;
private int height;
public ChunkBar() {
numOfChunks = 0;
chunks = new BitSet(numOfChunks);
x = 0;
y = 0;
width = 100;
height = 20;
}
public void setup(int numOfChunks) {
this.numOfChunks = numOfChunks;
chunks = new BitSet(numOfChunks);
}
public void setChunk(int index) {
chunks.set(index);
}
public double getRatio() {
int availableChunks = 0;
for (int i = 0; i < chunks.size(); i++) {
if (chunks.get(i)) {
availableChunks++;
}
}
double ratio = availableChunks / (double) numOfChunks * 100;
return ratio;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.drawRect(0, 0, width - 1, height - 1);
g2d.setColor(new Color(0, 0, 255));
float chunkWidth = getWidth() / (float) numOfChunks;
for (int i = 0; i < chunks.size(); i++) {
if (chunks.get(i)) {
Rectangle2D.Float chunk =
new Rectangle2D.Float(i*chunkWidth, 1, chunkWidth+1, height-2);
g2d.fill(chunk);
}
}
}
@Override
public int getX() {
return x;
}
@Override
public int getY() {
return y;
}
@Override
public int getWidth() {
return width;
}
@Override
public int getHeight() {
return height;
}
@Override
public Rectangle getBounds() {
return new Rectangle(x, y, width, height);
}
@Override
public void setBounds(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
repaint();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(width, height);
}
@Override
public void setPreferredSize(Dimension size) {
this.width = size.width;
this.height = size.height;
repaint();
}
@Override
public float getAlignmentX() {
return x;
}
@Override
public void setAlignmentX(float x) {
this.x = (int) x;
repaint();
}
@Override
public float getAlignmentY() {
return y;
}
@Override
public void setAlignmentY(float y) {
repaint();
this.y = (int) y;
}
}
Ah ovviamente tutti i ichunk sono della stessa dimensione a parte l'ultimo che può essere più piccolo: non ne tengo conto e approssimo considerandolo di dimensione pari agli altri! Grazie per l'aiuto
se avete qualche altro suggerimento è ben accetto...