📄 jcroppedwindow.java
字号:
/*
* Light And Shadow. A Persistent Universe based on Robert Jordan's Wheel of Time Books.
* Copyright (C) 2001-2002 WOTLAS Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package wotlas.libs.log;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.File;
/** A small utility to display a cropped window.
*
* @author Aldiss
*/
public class JCroppedWindow extends JWindow{
/*------------------------------------------------------------------------------------*/
// navigation bar images
private Image leftBar, middleBar, rightBar;
// Title
private String title;
// Font
private Font titleFont;
// User Mouse Listener
private MouseListener userMouseListener;
// User Mouse Listener
private MouseMotionListener userMouseMotionListener;
// left mouse button pressed ?
private boolean leftButtonPressed;
// resizing window ? moving window ?
private boolean resizingFromTop, resizingFromBottom, resizingFromLeft, resizingFromRight;
private boolean movingWindow;
// initial mouse position for window move
private int iniX, iniY;
private boolean updatedSize, updatedLocation;
private int newX, newY, newW, newH;
// resizable window ?
private boolean resizable;
// use the dark menu bar ?
private boolean useDarkMenuBar;
/*------------------------------------------------------------------------------------*/
// Our user ContentPane... yes it's a JPanel...
private JPanel userContentPane;
/*------------------------------------------------------------------------------------*/
/** Constructor with owner Frame and title.
*
* @param owner frame owner
* @param title window title, set to "" if you want none
* @param rLocator interface giving access to the images to use for our window.
*/
public JCroppedWindow( Frame owner, String title, LogResourceLocator rLocator ) {
this(owner,title,false,rLocator);
}
/*------------------------------------------------------------------------------------*/
/** Constructor with owner Frame and title.
*
* @param owner frame owner
* @param title window title, set to "" if you want none
* @param useDarkMenuBar which images do we use for the menu bar : light images or
* dark images.
* @param rLocator interface giving access to the images to use for our window.
*/
public JCroppedWindow( Frame owner, String title, boolean useDarkMenuBar, LogResourceLocator rLocator ) {
super( owner );
this.title = title;
this.useDarkMenuBar = useDarkMenuBar;
// We load the images
if(useDarkMenuBar) {
leftBar = rLocator.getGuiImage( "left-bar-dark.gif" );
middleBar = rLocator.getGuiImage( "middle-bar-dark.gif" );
rightBar = rLocator.getGuiImage( "right-bar-dark.gif" );
}
else {
leftBar = rLocator.getGuiImage( "left-bar.gif" );
middleBar = rLocator.getGuiImage( "middle-bar.gif" );
rightBar = rLocator.getGuiImage( "right-bar.gif" );
}
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(leftBar,0);
tracker.addImage(middleBar,1);
tracker.addImage(rightBar,2);
try{
tracker.waitForAll();
}catch(InterruptedException e) {
e.printStackTrace();
}
// Font
titleFont = new Font( "Dialog", Font.PLAIN, 11 );
// State inits
leftButtonPressed = false;
resizingFromTop = false;
resizingFromBottom = false;
resizingFromLeft = false;
resizingFromRight = false;
movingWindow = false;
resizable = true;
// Our Mouse Adapter
super.addMouseListener( new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if( e.getY()<rightBar.getHeight(null)
&& e.getX()>JCroppedWindow.this.getWidth()-rightBar.getWidth(null) )
dispose();
else
if(userMouseListener!=null)
userMouseListener.mouseClicked(e);
}
public void mouseEntered(MouseEvent e) {
if(userMouseListener!=null)
userMouseListener.mouseEntered(e);
}
public void mouseExited(MouseEvent e) {
if(userMouseListener!=null)
userMouseListener.mouseExited(e);
}
public void mousePressed(MouseEvent e) {
if(leftButtonPressed) { // if button already pressed
if(userMouseListener!=null)
userMouseListener.mousePressed(e);
return;
}
leftButtonPressed = true;
iniX = e.getX();
iniY = e.getY();
updatedSize=false;
updatedLocation=false;
newX = JCroppedWindow.this.getX();
newY = JCroppedWindow.this.getY();
newW = JCroppedWindow.this.getWidth();
newH = JCroppedWindow.this.getHeight();
movingWindow = false;
resizingFromTop = false;
resizingFromBottom = false;
resizingFromLeft = false;
resizingFromRight = false;
if( (e.getY() < 3) && resizable )
resizingFromTop = true;
else if( (e.getY() > JCroppedWindow.this.getHeight()-5) && resizable )
resizingFromBottom = true;
// else if( e.getY() < middleBar.getHeight(null)+2 )
// movingWindow = true;
if( !movingWindow && e.getX() < 5 && resizable )
resizingFromLeft = true;
else if( !movingWindow && (e.getX() > JCroppedWindow.this.getWidth()-5) && resizable )
resizingFromRight = true;
if(userMouseListener!=null)
userMouseListener.mousePressed(e);
}
public void mouseReleased(MouseEvent e) {
if(movingWindow) {
newX += e.getX()-iniX;
newY += e.getY()-iniY;
// updatedLocation=true;
}
else{
if(resizingFromTop) {
newY += e.getY()-iniY;
updatedLocation=true;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -