JPanel
バッファリングされた画像を表示および描画する次のコードがあります。
そのサイズをバッファリングされた画像のサイズに設定していますが、実際には設定されていません。
サイズを変更するとスクロール バーが表示されますJFrame
が、パネルまたは のサイズよりも大きくサイズを変更BufferedImage
すると、パネルのサイズの外側をクリックすると、マウス イベントが発生します。
余分なコードは省略しました。
public class PaintFrame extends JFrame{
private JScrollPane paintScrollPane;
private Painter painter;
private JPanel paintPanel;
private BufferedImage paintImage;
private Color forgroundColor;
public PaintFrame(){
super("Paint");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setPreferredSize(new Dimension(800, 600));
setLocationByPlatform(true);
getContentPane().setBackground(Color.black);
paintImage = new BufferedImage(700, 500, BufferedImage.TYPE_3BYTE_BGR);
paintPanel = new JPanel(){
@Override
public void paint(Graphics g){
if(paintImage != null){
g.drawImage(paintImage, 0, 0, paintImage.getWidth(), paintImage.getHeight(), null);
}
}
};
paintPanel.setBackground(Color.white);
paintPanel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent me){
mouseClickedOnPaint(me);
}
});
paintPanel.setPreferredSize(new Dimension(paintImage.getWidth(), paintImage.getHeight()));
paintScrollPane = new JScrollPane(paintPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
getContentPane().add(paintScrollPane);
pack();
}
}