La griglia dell'audiogramma è un componente di una certa complessità. Avere qualche problema nel realizzarlo non è cosa di cui stupirsi.
Puoi costruire un programma componendo le soluzioni che trovi in prototipi creati separatamente.
Prova a scrivere un'applicazione che apre una finestra dentro a cui c'è un componente nel quale è disegnata quella mini-griglia. Lo scheletro potrebbe essere:
Codice:
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
buildAndShow();
}
});
}
private static void buildAndShow() {
JFrame frame = new JFrame("Grid sample");
GridPanel panel = new GridPanel();
frame.add(panel);
frame.pack();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}
}
class GridPanel extends JComponent {
private int colWidth = 50;
private int rowHeight = 50;
private int rowCount = 5;
public Dimension getPreferredSize() {
Dimension standardSize = super.getPreferredSize();
standardSize.width = colWidth;
standardSize.height = rowCount * rowHeight;
return standardSize;
}
public void paint(Graphics graphics) {
Graphics2D g = (Graphics2D)graphics;
//pronti via:...
}
}
Troverai una soluzione per un caso speciale: quello dell'immagine che hai allegato. Una volta trovata quella soluzione speciale potrai tentare di generalizzarla. Passerai dal realizzare una griglia in cui le prime due righe sono alte H, la terza e la quarta H/2, la quinta H, ad una griglia in cui le righe possono avere altezza H o H/2. Dovrai stabilire un modo per identificare le righe che hanno altezza H e quelle che hanno altezza H/2. Poi provi ad trasportare la soluzione nel PainterAudiogramma. Se il PainterAudiogramma si dimostri "ostile" a questa mutazione lo prendi, lo butti nel cestino e ne fai uno più docile.
Calma, sangue freddo e coltello tra i denti.