📄 jtpbutton.java
字号:
package com.sunking.tp.swing;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import com.sunking.tp.framework.*;
import com.sunking.tp.util.*;
/**
*
* <p>Title: </p>
* <p>Description: 按钮</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author <a href="mailto:sunkingxie@hotmail.com">SunKing</a>
* @version 1.0
*/
public class JTPButton extends JLabel implements JTPComponent{
private static final long serialVersionUID = -3000000000000000008L;
/**
*当前是否选取
*/
protected boolean isSelected = false;
/**
*连接器
*/
protected Vector vecAssociator = new Vector();
/**
*被连接的组件
*/
protected Vector vecButton = new Vector();
public JTPButton() {
this(null);
}
public JTPButton(String text) {
this.getInputMap().clear();
this.getActionMap().clear();
setText(text);
setOpaque(false);
setHorizontalAlignment(SwingConstants.CENTER);
//加了下面这句语句在XP下不能正常保存,所以删除了
// setBorder(UIManager.getBorder("Button.border"));
}
/**
*设置选取状态
* @param isSelect
* @return
*/
public boolean setSelect(boolean isSelect){
if(isSelected == isSelect){
return true;
}
isSelected = isSelect;
repaint();
return true;
}
/**
*判断当前是否已选取
* @return
*/
public boolean isSelected(){
return isSelected;
}
/**
*添加连接器
* @param tpc
* @param associateType
*/
public void addAssociator(JTPComponent tpc,int associateType){
if(tpc == this)
return;
if(!isAssociator(tpc)&&!tpc.isAssociator(this)){
vecButton.add(tpc);
vecAssociator.add(new Assoicator(tpc,associateType));
}
}
/**
*移除连接器
* @param tpc
*/
public void removeAssociator(JTPComponent tpc){
for (int i = vecAssociator.size()-1; i>=0; i--) {
if(((Assoicator)vecAssociator.get(i)).getAssoicator() == tpc){
vecButton.remove(tpc);
vecAssociator.remove(i);
}
}
}
/**
* 是否已连接
* @param tpc
* @return
*/
public boolean hasAssociator(JTPComponent tpc){
for (int i = vecAssociator.size()-1; i>=0; i--) {
if(((Assoicator)vecAssociator.get(i)).getAssoicator() == tpc){
return true;
}
}
return false;
}
/**
*是否已连接组件
* @param tpc
* @return
*/
public boolean isAssociator(JTPComponent tpc){
return vecButton.contains(tpc);
}
/**
*取得所有连接器
* @return
*/
public Assoicator[] getAssociator(){
Assoicator assocator[]=new Assoicator[vecAssociator.size()];
vecAssociator.copyInto(assocator);
return assocator;
}
/**
*复制
* @return
*/
public Object clone(){
JTPButton cloneObject = new JTPButton(getText());
cloneObject.setSelect(isSelected);
cloneObject.setSize(getSize());
return cloneObject;
}
/**
*绘制按钮和其的句柄
* @param g
*/
public void paint(Graphics g){
g.setColor(UIManager.getColor("Panel.background"));
int w=getWidth();
int h=getHeight();
g.fillRect(0,0,w,h);
super.paint(g);
g.setColor(Color.black);
if(isSelected){
Rectangle[]rec=getHandleRectangles();
for (int i = 0; i < rec.length; i++) {
g.drawRect(rec[i].x,rec[i].y,rec[i].width,rec[i].height);
}
}
}
/**
*取得句柄的位置
* @return
*/
public Rectangle[] getHandleRectangles(){
int w=getWidth();
int h=getHeight();
return new Rectangle[]{
new Rectangle(0,h-HANDLE_SIZE-1,HANDLE_SIZE,HANDLE_SIZE),//SW_RESIZE_CURSOR 4
new Rectangle(w-HANDLE_SIZE-1,h-HANDLE_SIZE-1,HANDLE_SIZE,HANDLE_SIZE),//SE_RESIZE_CURSOR 5
new Rectangle(0,0,HANDLE_SIZE,HANDLE_SIZE), //NW_RESIZE_CURSOR 6
new Rectangle(w-HANDLE_SIZE-1,0,HANDLE_SIZE,HANDLE_SIZE),//NE_RESIZE_CURSOR 7
new Rectangle((w-HANDLE_SIZE)/2-1,0,HANDLE_SIZE,HANDLE_SIZE), //N_RESIZE_CURSOR 8
new Rectangle((w-HANDLE_SIZE)/2-1,h-HANDLE_SIZE-1,HANDLE_SIZE,HANDLE_SIZE), // S_RESIZE_CURSOR 9
new Rectangle(0,(h-HANDLE_SIZE)/2-1,HANDLE_SIZE,HANDLE_SIZE), // W_RESIZE_CURSOR 10
new Rectangle(w-HANDLE_SIZE-1,(h-HANDLE_SIZE)/2-1,HANDLE_SIZE,HANDLE_SIZE), //E_RESIZE_CURSOR 11
};
}
/**
*取得某点上句柄的序号
* @param p
* @return
*/
public int getHandle(java.awt.Point p){
Rectangle[]rec=getHandleRectangles();
for (int i = 0; i < rec.length; i++) {
if(rec[i].contains(p))
return i;
}
return -1;
}
/**
*拖动句柄以调整按钮大小
* @param index
* @param oldRec
* @param mx
* @param my
*/
public void moveHandle(int index,Rectangle oldRec,int mx,int my){
setBounds(JTPUtil.getNewBounds(index,oldRec,mx,my));
}
/**
*取得鼠标状态
* @param handleIndex
* @return
*/
public Cursor getAdjustCursor(int handleIndex){
return new Cursor(handleIndex + 4);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -