2024年2月7日发(作者:)

方法一:

如果你用过Toolkit类,这将是一件很简单的事情:

Toolkit tk=aultToolkit()

Image image=Image(""); /*是你的图标*/

nImage(image);

就这么简单,看看,已经变成你自己的图标了。Toolkit是个很有用类的,提供很多对窗口默认行为的修改,下面随便提一下,怎么把默认的鼠标图标改成你自己的图标:

Toolkit tk=aultToolkit();

Image img=ge(""); /*是你的图标*/

Cursor cu=CustomCursor(img,new Point(10,10),"stick");

sor(cu);

方法二:

用到ImageIcon类和setIconImage方法。

import .*;

public class aa extends JFrame {

String image = new String(""); //建立一个字符串保存要用的图标的路径,关于java的路径请参考其它文档

ImageIcon test = new ImageIcon(image); //建立一个ImageIcon类,产生setIconImage()方法需要的Image数据

public aa() {

super("演示自定义标题栏的图标的方法");

nImage(ge()); //设置标题栏的图标为

aultCloseOperation(_ON_CLOSE);

();

//le("sdfsdf");

e(400,200);

}

public static void main(String[] args) {

aa jIcon = new aa();

}

}

此法本人再次简化为两条语句:

import .*;

public class aa extends JFrame {

ImageIcon test = new ImageIcon(new String());//第一句

public aa() {

super("演示自定义标题栏的图标的方法");

nImage(ge()); //第二句

e(400,200);

();

}

public static void main(String[] args) {

aa jIcon = new aa();

}

}

怎么在JFrame窗体上的标题栏加上自已的按钮?除了去掉JFrame修饰外,再自已重新绘制那些按键,不过那样子连窗体都不能移动了,缩小和放大都要自已重写~有没有别的好办法?知道的朋友请教下~

没有别的好方法,不过缩小和放大我自己写了一个,楼主可以参考一下。

Java code

import .*;

import .*;

import .*;

public class ResizeFrame extends JFrame {

private boolean isTopLeft;// 是否处于左上角调整窗口状态

private boolean isTop;// 是否处于上边界调整窗口状态

private boolean isTopRight;// 是否处于右上角调整窗口状态

private boolean isRight;// 是否处于右边界调整窗口状态

private boolean isBottomRight;// 是否处于右下角调整窗口状态

private boolean isBottom;// 是否处于下边界调整窗口状态

private boolean isBottomLeft;// 是否处于左下角调整窗口状态

private boolean isLeft;// 是否处于左边界调整窗口状态

private final static int RESIZE_WIDTH = 5;// 判定是否为调整窗口状态的范围与边界距离

private final static int MIN_WIDTH = 20;// 窗口最小宽度

private final static int MIN_HEIGHT = 20;// 窗口最小高度

public ResizeFrame() {

addMouseMotionListener(new ResizeAdapter(this));

}

private class ResizeAdapter extends MouseAdapter {

private Component c;

public ResizeAdapter(Component c) {

this.c = c;

}

@Override

public void mouseMoved(MouseEvent event) {

int x = ();

int y = ();

int width = th();

int height = ght();

int cursorType = T_CURSOR;// 鼠标光标初始为默认类型,若未进入调整窗口状态,保持默认类型

// 先将所有调整窗口状态重置

isTopLeft = isTop = isTopRight = isRight =

isBottomRight = isBottom = isBottomLeft = isLeft = false;

if (y <= RESIZE_WIDTH) {

if (x <= RESIZE_WIDTH) {// 左上角调整窗口状态

isTopLeft = true;

cursorType = _RESIZE_CURSOR;

} else if (x >= width - RESIZE_WIDTH) {// 右上角调整窗口状态

isTopRight = true;

cursorType = _RESIZE_CURSOR;

} else {// 上边界调整窗口状态

isTop = true;

cursorType = Cursor.N_RESIZE_CURSOR;

}

} else if (y >= height - RESIZE_WIDTH) {

if (x <= RESIZE_WIDTH) {// 左下角调整窗口状态

isBottomLeft = true;

cursorType = _RESIZE_CURSOR;

} else if (x >= width - RESIZE_WIDTH) {// 右下角调整窗口状态

isBottomRight = true;

cursorType = _RESIZE_CURSOR;

} else {// 下边界调整窗口状态

isBottom = true;

cursorType = Cursor.S_RESIZE_CURSOR;

}

} else if (x <= RESIZE_WIDTH) {// 左边界调整窗口状态

isLeft = true;

cursorType = Cursor.W_RESIZE_CURSOR;

} else if (x >= width - RESIZE_WIDTH) {// 右边界调整窗口状态

isRight = true;

cursorType = Cursor.E_RESIZE_CURSOR;

}

// 最后改变鼠标光标

sor(new Cursor(cursorType));

}

@Override

public void mouseDragged(MouseEvent event) {

int x = ();

int y = ();

int width = th();

int height = ght();

// 保存窗口改变后的x、y坐标和宽度、高度,用于预判是否会小于最小宽度、最小高度

int nextX = ();

int nextY = ();

int nextWidth = width;

int nextHeight = height;

if (isTopLeft || isLeft || isBottomLeft) {// 所有左边调整窗口状态

nextX += x;

nextWidth -= x;

}

if (isTopLeft || isTop || isTopRight) {// 所有上边调整窗口状态

nextY += y;

nextHeight -= y;

}

if (isTopRight || isRight || isBottomRight) {// 所有右边调整窗口状态

nextWidth = x;

}

if (isBottomLeft || isBottom || isBottomRight) {// 所有下边调整窗口状态

nextHeight = y;

}

if (nextWidth <= MIN_WIDTH) {// 如果窗口改变后的宽度小于最小宽度,则宽度调整到最小宽度

nextWidth = MIN_WIDTH;

if (isTopLeft || isLeft || isBottomLeft) {// 如果是从左边缩小的窗口,x坐标也要调整

nextX = () + width - nextWidth;

}

}

if (nextHeight <= MIN_HEIGHT) {// 如果窗口改变后的高度小于最小高度,则高度调整到最小高度

nextHeight = MIN_HEIGHT;

if (isTopLeft || isTop || isTopRight) {// 如果是从上边缩小的窗口,y坐标也要调整

nextY = () + height - nextHeight;

}

}

// 最后统一改变窗口的x、y坐标和宽度、高度,可以防止刷新频繁出现的屏闪情况

setBounds(nextX, nextY, nextWidth, nextHeight);

}

}

public static void main(String[] args) {

// 一个简单的演示小例子

JFrame frame = new ResizeFrame();

e(400, 300);

Dimension screenSize =

aultToolkit().getScreenSize();

ation(( - th())

/ 2, ( - ght()) / 2);

seListener(new MouseAdapter() {

public void mouseClicked(MouseEvent event) {

if (ckCount() > 1) {

(0);

}

}

});

ecorated(true);

ible(true);

}

}