1、setUndecorated(true)设置窗体无边框,但是setResizable(true)设置
可以通过鼠标调整大小,不起作用,这是怎么回事?
2、有没有事件,可以监听到,鼠标移动到边缘?如果java设置窗体无边框后,无
法鼠标拖动调整大小,我想自己做监听事件。
可以通过鼠标调整大小,不起作用,这是怎么回事?
2、有没有事件,可以监听到,鼠标移动到边缘?如果java设置窗体无边框后,无
法鼠标拖动调整大小,我想自己做监听事件。
http://blog.csdn.net/jia20003/article/details/6663801
一定给,一定给!呵呵呵!出了点小问题,按照你的思路,用panel做的,边框很大!无法修改边框的大小。 我想要这种效果的!无标题栏,自定义边框,而且可以拖动改变大小!就想QQ面板一样!
1、我所提的问题,出现的这种情况;
2、无标题栏,自定义边框,可以根据需要修改,做的简单;
3、像QQ面板一样,需要时,可以根据需要向上加组件;
4、可以拖动修改大小,拖动移动位置;
源码:package test;import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.LineBorder;public class WindowDragSize { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
final JFrame frame = new JFrame();
frame.setUndecorated(true);
Border b = new CompoundBorder(new EtchedBorder(),new LineBorder(Color.RED));
final JPanel panel = new JPanel();
panel.setSize(200,100);
panel.setBorder(b);
panel.addMouseMotionListener(new MouseAdapter() {
private boolean top = false;
private boolean down = false;
private boolean left = false;
private boolean right = false;
private boolean drag = false;
private Point lastPoint = null;
private Point draggingAnchor = null;
@Override
public void mouseMoved(MouseEvent e) {
if( e.getPoint().getY() == 0 ){
frame.setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
top = true;
}else if(Math.abs(e.getPoint().getY()- frame.getSize().getHeight()) <= 1 ){
frame.setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
down = true;
}else if(e.getPoint().getX() == 0 ){
frame.setCursor(Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
left = true;
}else if(Math.abs(e.getPoint().getX()- frame.getSize().getWidth()) <=1 ){
frame.setCursor(Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
right = true;
}else{
frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
draggingAnchor = new Point(e.getX() + panel.getX(), e.getY() + panel.getY());
top = false;
down = false;
left = false;
right = false;
drag = true;
}
}
@Override
public void mouseDragged(MouseEvent e) {
Dimension dimension = frame.getSize();
if(top){
dimension.setSize(dimension.getWidth() ,dimension.getHeight()-e.getY());
frame.setSize(dimension);
frame.setLocation(frame.getLocationOnScreen().x, frame.getLocationOnScreen().y + e.getY());
}else if(down){
dimension.setSize(dimension.getWidth() , e.getY());
frame.setSize(dimension);
}else if(left){
dimension.setSize(dimension.getWidth() - e.getX() ,dimension.getHeight() );
frame.setSize(dimension);
frame.setLocation(frame.getLocationOnScreen().x + e.getX(),frame.getLocationOnScreen().y );
}else if(right){
dimension.setSize(e.getX(),dimension.getHeight());
frame.setSize(dimension);
}else {
frame.setLocation(e.getLocationOnScreen().x - draggingAnchor.x, e.getLocationOnScreen().y - draggingAnchor.y);
}
}
}); frame.setLocation(200,100);
frame.getContentPane().add(panel);
frame.setSize(200,100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}}