imagelabel.java
来自「一个简单的visio程序。」· Java 代码 · 共 462 行
JAVA
462 行
package webide.views.toolbox;
import java.awt.Canvas;
import java.awt.Window;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Component;
import java.awt.AWTEvent;
import java.awt.AWTEventMulticaster;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Point;
import java.awt.FontMetrics;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.ActionListener;
public class ImageLabel extends Canvas {
private Image[] images = null;
private transient int loop;
private boolean stopped = true;
private int id = -1 ;
private int w, h ;
private int state ;
private String name = null ;
private String showname = null ;
private static ImageLabel tBCB, enter;
private static boolean press = false;
private boolean isEnable;
private ActionListener actionListener;
private int mode = 0;
public Dimension getPreferredSize() {
return new Dimension(32,32);
}
public ImageLabel() {
id = -1;
state = 1;
setSize(32, 32);
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
}
public ImageLabel(Image image){
this();
Image[] imgs = new Image[2];
for(int i = 0; i < 2; i++) {
imgs[i] = image;
}
setImages(imgs);
mode = 1;
}
/**
* Set state images - 2 images.
*/
public void setImages(Image[] images)
{
this.images = images;
}
public Image[] getImages() {
return images;
}
public void addActionListener(ActionListener listener) {
actionListener = AWTEventMulticaster.add(actionListener, listener);
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
}
public void removeActionListener(ActionListener listener) {
actionListener = AWTEventMulticaster.remove(actionListener, listener);
}
public void processMouseEvent(MouseEvent e) {
switch(e.getID()) {
case MouseEvent.MOUSE_PRESSED:
mousePressed(e);
break;
case MouseEvent.MOUSE_CLICKED:
mouseClicked(e);
break;
case MouseEvent.MOUSE_RELEASED:
mouseReleased(e);
break;
case MouseEvent.MOUSE_ENTERED:
mouseEntered(e);
break;
case MouseEvent.MOUSE_EXITED:
mouseExited(e);
break;
}
super.processMouseEvent(e);
} // end of processMouseEvent.
public void setName(String name) {
this.name = name;
showname = name;
int ind = name.lastIndexOf(".");
if (ind != -1)
showname = name.substring(ind+1);
int index = name.lastIndexOf("(");
if (index != -1)
showname = name.substring(0,index-1);
}
public String getName() {
return name;
}
private String getShowName(){
return showname;
}
public int getId() {
return id;
}
public void setId(int index) {
id = index;
}
public int getState() {
return state;
}
public static void setSelectTbcb(ImageLabel b){
tBCB = b;
}
public static ImageLabel getSelectTbcb(){
return tBCB;
}
public void update(Graphics g) {
paint(g);
}
Image offImg = null;
public void paint(Graphics g) {
Dimension d = getSize();
if(offImg == null) {
offImg = createImage(d.width, d.height);
}
Graphics offGfx = offImg.getGraphics();
Image img = null;
if(state == 2) {
if(img == null && images != null){
img = images[1];
}
else if(images != null){
img = images[1];
}
}
else if(images != null) {
if(state == 4) {
img = images[0];
}
else {
img = images[1];
}
}
int w = 0, h = 0, dx1 = 0,dy1 = 0, dx2 = 0, dy2 = 0, sx1 = 0, sy1 = 0, sx2 = 0, sy2 = 0;
if(img != null) {
w = img.getWidth(this);
h = img.getHeight(this);
dx1 = Math.max(0, (d.width - w) / 2);
dy1 = Math.max(0, (d.height - h) / 2);
dx2 = Math.min(d.width, dx1 + w);
dy2 = Math.min(d.height, dy1 + h);
sx1 = Math.max(0, (w - d.width) / 2);
sy1 = Math.max(0, (h - d.height) / 2);
sx2 = Math.min(sx1 + w, sx1 + d.width);
sy2 = Math.min(sy1 + h, sy1 + d.height);
}
switch (getState()) {
case 1 :
{
offGfx.setColor(getBackground());
offGfx.fillRect(0, 0, d.width, d.height);
if(img != null) {
offGfx.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, this);
}
break;
}
case 2 :
{
offGfx.setColor(getBackground());
offGfx.fillRect(0, 0, d.width, d.height);
if(img != null) {
offGfx.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, this);
}
offGfx.setColor(Color.white);
offGfx.drawLine(0,0,0,d.height);
offGfx.drawLine(0,0,d.width,0);
offGfx.drawLine(d.width,0,d.width,d.height);
offGfx.drawLine(0,d.height,d.width,d.height);
offGfx.setColor(Color.gray);
offGfx.drawLine(d.width-1,1,d.width-1,d.height-1);
offGfx.drawLine(1,d.height-1,d.width-1,d.height-1);
offGfx.drawLine(d.width,0,d.width,d.height);
offGfx.drawLine(0,d.height,d.width,d.height);
break;
}
case 3 :
{
Color color;
if(id != -1) {
color = Color.lightGray;
}
else {
color = new Color(220,220,220);
}
offGfx.setColor(color);
offGfx.fillRect(0, 0, d.width, d.height);
if(img != null) {
offGfx.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, this);
}
offGfx.setColor(Color.gray);
offGfx.drawLine(0,0,0,d.height);
offGfx.drawLine(0,0,d.width,0);
offGfx.setColor(Color.white);
offGfx.drawLine(d.width-1,1,d.width-1,d.height-1);
offGfx.drawLine(1,d.height-1,d.width-1,d.height-1);
break;
}
case 4 :
{
offGfx.setColor(getBackground());
offGfx.fillRect(0, 0, d.width, d.height);
if(img != null) {
offGfx.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, this);
}
if(id != -1) break;
offGfx.setColor(Color.gray);
offGfx.drawLine(0,0,0,d.height);
offGfx.drawLine(0,0,d.width,0);
offGfx.setColor(Color.white);
offGfx.drawLine(d.width-1,1,d.width-1,d.height-1);
offGfx.drawLine(1,d.height-1,d.width-1,d.height-1);
}
}
g.drawImage(offImg, 0, 0, this);
offGfx.dispose();
}
public void tmpstate1() {
if(enter == this) {
setState(2);
}
else {
setState(1);
}
}
public void tmpstate2() {
setState(2);
}
public void tmpstate3() {
setState(3);
}
public void tmpstate4() {
setState(4);
}
public void setState(int status) {
if(state == status) return;
state = status;
if(isShowing()) {
repaint();
}
}
void drawFrame(Image img) {
Graphics g = getGraphics();
if(g == null) return;
Dimension s = getSize();
if(offImg == null) {
offImg = createImage(s.width, s.height);
}
Graphics offGfx = offImg.getGraphics();
int w = img.getWidth(this);
int h = img.getHeight(this);
int dx1 = Math.max(0, (s.width - w) / 2);
int dy1 = Math.max(0, (s.height - h) / 2);
int dx2 = Math.min(s.width, dx1 + w);
int dy2 = Math.min(s.height, dy1 + h);
int sx1 = Math.max(0, (w - s.width) / 2);
int sy1 = Math.max(0, (h - s.height) / 2);
int sx2 = Math.min(sx1 + w, sx1 + s.width);
int sy2 = Math.min(sy1 + h, sy1 + s.height);
if(dx1 == 0)
{
dx1 += 1;
sx1 += 1;
dx2 -= 1;
sx2 -= 1;
}
if(dy1 == 0)
{
dy1 += 1;
sy1 += 1;
dx2 -= 1;
dy2 -= 1;
}
offGfx.setColor(getBackground());
offGfx.fillRect(1, 1, s.width - 2, s.height - 2);
offGfx.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, this);
g.drawImage(offImg, 0, 0, this);
offGfx.dispose();
}
public Frame getFrame() {
Frame frame = null;
try{
Container parent = getParent();
while (!(parent instanceof java.awt.Frame)) {
parent = parent.getParent();
}
if (parent != null)
frame = (java.awt.Frame)parent;
}catch (Exception e) {}
return frame;
}
public void mouseClicked(MouseEvent evt) {}
public void mouseEntered (MouseEvent event) {
if (id == -2) return;
mouseEnteredchangestate(id);
webide.MainConsole mM = webide.MainConsole.getMainConsole();
mM.showStatus(showname);
}
private void mouseEnteredchangestate(int id){
enter = this;
if(state == 2) return;
if (id != -1){
if ( getState()==4 )return;
if (press)
tmpstate3();
else tmpstate2();
}else{
switch(state){
case 1:tmpstate2();break;
case 3:tmpstate4();break;
default :;
}
}
}
public void mouseExited(MouseEvent event) {
if (id == -2) return;
webide.MainConsole mM = webide.MainConsole.getMainConsole();
if (mM != null) {
mM.showStatus("");
}
mouseExitedchangestate(id);
}
private void mouseExitedchangestate(int id){
enter = null;
if(state == 1) return;
if (id != -1){
if ( getState()==4 )return;
setState(1);
}else{
switch(state){
case 2: setState(1); break;
case 4: tmpstate3(); break;
default :;
}
}
}
public void mousePressed(MouseEvent event) {
int ind = event.getModifiers();
if (ind == java.awt.event.InputEvent.BUTTON3_MASK) return;
if (id == -2) return;
mousePressedchangestate(id,event);
}
ToolBox tbp = null;
private synchronized void mousePressedchangestate(int id,MouseEvent e){
Component parent = getParent();
if (parent instanceof ToolBox){
tbp = (ToolBox)parent;
Object obj = e.getSource();
tbp.mreleased(obj);
}
if(state == 3) return;
if (id != -1){
if ( getState()==4 )return;
tmpstate3();
press = true; // this ;
}else{
if ((tBCB!=null)&&(tBCB!=this)) {
tBCB.setState(1);
}
tmpstate3();
tBCB = this;
}
}
public void mouseReleased(MouseEvent evt){
int ind = evt.getModifiers();
if (ind == java.awt.event.InputEvent.BUTTON3_MASK) return;
if (id == -2) return;
if (id != -1){
if ( getState()==4 )return;
synchronized(this){
if (enter == this ) isEnable = true;
if (enter != null && enter == this){
enter.tmpstate2();
}
press = false; // null;
}
}
else{;}
if (!(id != -1 && getState() == 4) && actionListener != null && isEnable) {
isEnable = false ;
actionListener.actionPerformed(new ActionEvent(
this, ActionEvent.ACTION_PERFORMED, name));
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?