私はを持っています、私はに画像を含むJScrollPanel
を追加し、それは機能しますが、内の画像が幅、高さ、または両方のいずれかよりも大きい場合、パネルは約20x20にサイズ変更されます。なぜそれをしているのですか?のビューポートでを使用しています。私が期待しているのは、がそれよりも大きい場合、スクロールバーが追加されるということですが、それは起こっていることではありません。助言がありますか?JPanel
JScrollPanel
JPanel
JScrollPanel
GridBagLayout
JScrollPanel
JPanel
JScrollPanel
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
WebFileChooser wfc = null;
if(wfc == null){
wfc = new WebFileChooser(this, "Open an Image");
wfc.setSelectionMode(SelectionMode.SINGLE_SELECTION);
wfc.setAvailableFilter(GlobalConstants.IMAGES_AND_FOLDERS_FILTER);
wfc.setChooseFilter(GlobalConstants.IMAGES_FILTER);
wfc.setCurrentDirectory("/Users/Ryan/Desktop");
}
wfc.setVisible(true);
if(wfc.getResult() == StyleConstants.OK_OPTION){
String file = wfc.getSelectedFile().getPath();
try{
imagePane.remove(canvas);
}catch(Exception e){
}
canvas = new Canvas();
canvas.setVisible(true);
canvas.setImage(file);
//imagePane.getViewport().setLayout(new GridBagLayout());
canvas.setSizeFromLoaded();
imagePane.getViewport().add(canvas);
imagePane.repaint();
imagePane.revalidate();
}
}
Canvasクラスは次のとおりです。
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package pocketshop;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import pocketshop.util.ImageSync;
/**
*
* @author Ryan
*/
public class Canvas extends CanvasShadow{
public static BufferedImage image = null, preview = null;
public static int width, height;
public void setImage(String filename){
try{
Canvas.image = ImageIO.read(new File(filename));
Canvas.width = image.getWidth();
Canvas.height = image.getHeight();
ImageSync.originalPixels = new int[width * height];
ImageSync.previewPixels = new int[width * height];
Canvas.image.getRGB(0, 0, width, height, ImageSync.originalPixels, 0, width);
}catch(IOException e){
}
}
public static void setImage(BufferedImage image){
Canvas.image = image;
Canvas.width = image.getWidth();
Canvas.height = image.getHeight();
ImageSync.originalPixels = new int[width * height];
ImageSync.previewPixels = new int[width * height];
Canvas.image.getRGB(0, 0, width, height, ImageSync.originalPixels, 0, width);
}
public static void setPreview(BufferedImage img, Container parent){
preview = img;
parent.repaint();
}
public static BufferedImage deepCopy(){
ColorModel cm = Canvas.image.getColorModel();
boolean isAlphaPremultiplied = cm.isAlphaPremultiplied();
WritableRaster raster = Canvas.image.copyData(null);
return new BufferedImage(cm, raster, isAlphaPremultiplied, null);
}
public void setSizeFromLoaded(){
try{
this.setPreferredSize(new Dimension(Canvas.width + 10, Canvas.height + 10));
this.setSize(Canvas.width + 10, Canvas.height + 10);
}catch(Exception e){
e.getMessage();
}
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
if(Canvas.preview != null){
g.drawImage(Canvas.preview, 5, 5, width, height, Color.black, null);
}else{
g.drawImage(Canvas.image, 5, 5, width, height, Color.black, null);
}
}
}
そして、これがCanvasShadowクラスです。
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package pocketshop;
import java.awt.Color;
import org.jdesktop.swingx.JXPanel;
import org.jdesktop.swingx.border.DropShadowBorder;
public class CanvasShadow extends JXPanel{
public CanvasShadow(){
DropShadowBorder shadow = new DropShadowBorder();
shadow.setShadowColor(Color.BLACK);
shadow.setShowLeftShadow(true);
shadow.setShowRightShadow(true);
shadow.setShowBottomShadow(true);
shadow.setShowTopShadow(true);
this.setBorder(shadow);
float[] hsb = new float[3];
Color.RGBtoHSB(255, 255, 255, hsb);
this.setBackground(Color.getHSBColor(hsb[0], hsb[1], hsb[2]));
}
}
実際の画像は次のとおりです。http://images2.fanpop.com/images/photos/4800000/Beach-beaches-4843817-1280-800.jpg