You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.2 KiB
111 lines
3.2 KiB
package com.fr.design.designer.ui; |
|
|
|
import com.fr.general.ImageWithSuffix; |
|
import java.awt.Graphics; |
|
import java.awt.Image; |
|
import javax.swing.JComponent; |
|
|
|
|
|
/** |
|
* |
|
* <p>图片控件中的已选图片展示面板</p> |
|
* |
|
* @author Jimmy.Zheng created on 2022/8/11 21:17 |
|
**/ |
|
public class ImgPanel extends JComponent { |
|
private static final long serialVersionUID = 1L; |
|
private Image backgroundImage; |
|
private int imageDisplayMode; |
|
private int modeIndex; |
|
|
|
public ImgPanel() { |
|
this(null, 0); |
|
} |
|
|
|
public ImgPanel(Image image, int modeName) { |
|
setBackgroundImage(image); |
|
setImageDisplayMode(modeName); |
|
} |
|
|
|
public void setBackgroundImage(Image image) { |
|
this.backgroundImage = image; |
|
repaint(); |
|
} |
|
|
|
public Image getBackgroundImage() { |
|
return this.backgroundImage; |
|
} |
|
|
|
public void setImageDisplayMode(int modeName) { |
|
if (modeName == 1) { |
|
this.modeIndex = 0; |
|
} |
|
|
|
if (modeName == 0) { |
|
this.imageDisplayMode = 0; |
|
this.modeIndex = 1; |
|
} |
|
|
|
if (modeName == 2) { |
|
this.imageDisplayMode = 2; |
|
this.modeIndex = 2; |
|
} |
|
if (modeName == 4) { |
|
this.imageDisplayMode = 4; |
|
this.modeIndex = 3; |
|
} |
|
repaint(); |
|
} |
|
|
|
public int getImageDisplayMode() { |
|
return this.imageDisplayMode; |
|
} |
|
|
|
@Override |
|
protected void paintComponent(Graphics g) { |
|
super.paintComponent(g); |
|
|
|
if (this.backgroundImage != null) { |
|
if (this.backgroundImage instanceof ImageWithSuffix) { |
|
this.backgroundImage = ((ImageWithSuffix) backgroundImage).getImage(); |
|
} |
|
int width = getWidth(); |
|
int height = getHeight(); |
|
int imageWidth = this.backgroundImage.getWidth(this); |
|
int imageHeight = this.backgroundImage.getHeight(this); |
|
|
|
switch (this.modeIndex) { |
|
case 0: |
|
int x = (width - imageWidth) / 2; |
|
int y = (height - imageHeight) / 2; |
|
g.drawImage(this.backgroundImage, x, y, this); |
|
break; |
|
case 1: |
|
for (int ix = 0; ix < width; ix += imageWidth) { |
|
for (int iy = 0; iy < height; iy += imageHeight) { |
|
g.drawImage(this.backgroundImage, ix, iy, this); |
|
} |
|
} |
|
|
|
break; |
|
case 2: |
|
g.drawImage(this.backgroundImage, 0, 0, width, height, this); |
|
break; |
|
case 3: |
|
double sx = 1.0 * width / imageWidth; |
|
double sy = 1.0 * height / imageHeight; |
|
|
|
if (sx > sy) { |
|
sx = sy; |
|
width = (int) (sx * imageWidth); |
|
} else { |
|
sy = sx; |
|
height = (int) (sy * imageHeight); |
|
} |
|
int xx = (getWidth() - width) / 2; |
|
int yy = (getHeight() - height) / 2; |
|
g.drawImage(this.backgroundImage, xx, yy, width, height, this); |
|
} |
|
} |
|
} |
|
}
|
|
|