Tenho a seguinte situação:
Criei uma classe que estende JPanel e sobrescrevi seu método paint.
Como tal panel pode ter um tamanho demasiado grande, optei por adicioná-lo em um JScrollPane.
Com isso, obtive os seguintes problemas:
1- Quando executo o programa, o JPanel não aparece enquanto eu não forçar um repaint no mesmo (o mesmo ocorre quando redimensiono a janela).
Programa executado
Após 1 clique (que força o repaint)
Janela maximizada (novamente o JPanel parece sumir)
2- A barra de scroll apenas se move se eu clicar na mesma e arrasta-la (usando scroll do mouse ou as setas da barra realizam scroll, porem a barrinha não se desloca)
3- Quando chego no limite do JPanel, surge uma duplicata do mesmo, que não tem nenhum listener (como se fosse apenas uma imagem colada ali)
Duplicata mencionada (notem também como o scroll não se moveu e continua lá em cima)
Após arrastar a scrollbar (surgiu um pedaço de scrollbar no canto superior esquerdo e, apenas de a imagem aparentar ser a mesma que a anterior, nenhum listener do panel é ativado pois o que aparece é apenas uma “cópia” ou algo assim do original)
A seguir, o código da frame principal:
[code]package com.jam.mapcreator;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
public class PrimaryWindow extends JFrame {
private JScrollPane scrollPane;
private MapPanel mapPanel;
public PrimaryWindow(){
Dimension screen = this.getToolkit().getScreenSize();
this.setBounds((int) (screen.getWidth()/4), (int) (screen.getHeight()/4), (int)screen.getWidth()/2, (int) screen.getHeight()/2);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setTitle("Map Maker v.0.1");
mapPanel = new MapPanel(100, 100);
mapPanel.setPreferredSize(this.getMaximumSize());
scrollPane = new JScrollPane();
scrollPane.getVerticalScrollBar().setUnitIncrement(25);
scrollPane.getHorizontalScrollBar().setUnitIncrement(25);
scrollPane.setViewportBorder(BorderFactory.createBevelBorder(0));
scrollPane.setViewportView(mapPanel);
scrollPane.getViewport().setOpaque(false);
this.add(scrollPane);
this.setVisible(true);
}
}
[/code]
Espero que possam me ajudar.