У меня есть JFrame, содержащий JScrollPane, содержащий JPanel (только с графикой) и JTabbedPanel.На JScrollPane вот метод рисования:
public void paint(Graphics g) {
g2d = (Graphics2D) g;
super.paint(g2d);
if (geneLines.size() != 0 ) {
g2d.drawString("5'",linePadding, topMargin+4);
for(int i=0; i<geneLines.size();i++) {
drawDNALine(i);
drawLineLabels(i);
for(int j=0; j<geneLines.get(i).size();j++) {
Gene gene = geneLines.get(i).get(j);
drawGene(i, gene.getMid(), initColor(gene.getFunctionnality()), gene.getFunctionnality() >= 2 ? (float)0.5:(float)1, gene);
}
}
g2d.drawString("3'", 510, (geneLines.size()-1)*linePadding+topMargin+4);
}
setPreferredSize(new Dimension(getWidth()-20,(geneLines.size()-1)*linePadding+topMargin-GlobalVars.squareY/2+topMargin));
revalidate();
}
А вот метод drawGene:
private void drawGene(int l, int mid, Color c, float w, Gene g) {
int posX = Math.round(((((float)mid/(float)length)-l)*400+100-GlobalVars.squareX/2));
int posY = l*linePadding+topMargin-GlobalVars.squareY/2;
g2d.setColor(c);
g2d.fillRect(posX,posY,(int) (GlobalVars.squareX*w),GlobalVars.squareY);
g2d.setColor(Color.black);
g2d.drawRect(posX,posY,(int) (GlobalVars.squareX*w),GlobalVars.squareY);
AffineTransform atBefore = g2d.getTransform();
Rectangle2D r = g2d.getFontMetrics().getStringBounds(g.getName(), g2d);
AffineTransform trans = AffineTransform.getTranslateInstance(posX+5, posY-40);
trans.concatenate(AffineTransform.getRotateInstance(-Math.PI/2));
trans.concatenate(AffineTransform.getTranslateInstance(-r.getCenterX(), -r.getCenterY()));
g2d.setTransform(trans);
g2d.drawString(g.getName(), 0, 0);
g2d.setTransform(atBefore);
}
Итак, вот моя цель и моя проблема.Я должен сделать картину, показывающую распределение генов по линиям.Каждый ген представляет собой квадрат (или прямоугольник), и я должен написать название гена вертикально над квадратом / прямоугольником.Я также записываю некоторую информацию, такую как длина линии и т. Д. Таким образом, когда я изменяю размер рамки, все в порядке (хорошо перекрашивается), то же самое, если я уменьшаю рамку.Но, если количество строк слишком велико, появляется полоса прокрутки (поэтому я использую JScrollPane).И когда я перемещаю эту полосу прокрутки, весь вертикальный текст исчезает.Я не понимаю почему, потому что рисование текста в том же методе, что и рисование прямоугольника (и они хорошо перекрашиваются при прокрутке).
Я понятия не имею, откуда это исходит ... ЯЯ пытался перерисовать вручную, но у меня ничего не получилось.
Я использую Eclipse в Windows, и я готов, если вам понадобится дополнительная информация, конечно.Большое спасибо за любую помощь.