// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: CreateShape.java
package ysh.studio.swing.window;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.geom.Area;
import java.awt.image.PixelGrabber;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.JFrame;
import com.sun.awt.AWTUtilities;
public class CreateShape {
private Image img;
private JFrame jf;
private Point origin;
public CreateShape(JFrame jf, String image) throws InterruptedException,
IOException {
this.jf = jf;
MediaTracker mt = new MediaTracker(jf);
img = Toolkit.getDefaultToolkit().getImage(
getClass().getResource(image));
mt.addImage(img, 0);
mt.waitForAll();
initialize();
}
private void initialize() throws IOException {
jf.setSize(img.getWidth(null), img.getHeight(null));
jf.setUndecorated(true);
origin = new Point();
AWTUtilities.setWindowShape(jf, getImageShape(img));
AWTUtilities.setWindowOpacity(jf, 0.8F);
jf.setLocationRelativeTo(null);
}
public void addDragLisener() {
jf.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
origin.x = e.getX();
origin.y = e.getY();
}
public void mouseClicked(MouseEvent e) {
if (e.getButton() == 3)
System.exit(0);
}
public void mouseReleased(MouseEvent e) {
super.mouseReleased(e);
}
public void mouseEntered(MouseEvent e) {
jf.repaint();
}
});
jf.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
Point p = jf.getLocation();
jf.setLocation((p.x + e.getX()) - origin.x, (p.y + e.getY())
- origin.y);
}
});
}
public Shape getImageShape(Image img) {
ArrayList<Integer> x = new ArrayList<Integer>();
ArrayList<Integer> y = new ArrayList<Integer>();
int width = img.getWidth(null);
int height = img.getHeight(null);
PixelGrabber pgr = new PixelGrabber(img, 0, 0, -1, -1, true);
try {
pgr.grabPixels();
} catch (InterruptedException ex) {
ex.getStackTrace();
}
int pixels[] = (int[]) (int[]) pgr.getPixels();
for (int i = 0; i < pixels.length; i++) {
int alpha = getAlpha(pixels[i]);
if (alpha != 0) {
x.add(Integer.valueOf(i % width <= 0 ? 0 : i % width - 1));
y.add(Integer.valueOf(i % width != 0 ? i / width : i != 0 ? i
/ width - 1 : 0));
}
}
int matrix[][] = new int[height][width];
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++)
matrix[i][j] = 0;
}
for (int c = 0; c < x.size(); c++)
matrix[((Integer) y.get(c)).intValue()][((Integer) x.get(c))
.intValue()] = 1;
Area rec = new Area();
int temp = 0;
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
if (matrix[i][j] == 1) {
if (temp == 0) {
temp = j;
continue;
}
if (j != width)
continue;
if (temp == 0) {
Rectangle rectemp = new Rectangle(j, i, 1, 1);
rec.add(new Area(rectemp));
} else {
Rectangle rectemp = new Rectangle(temp, i, j - temp, 1);
rec.add(new Area(rectemp));
temp = 0;
}
continue;
}
if (temp != 0) {
Rectangle rectemp = new Rectangle(temp, i, j - temp, 1);
rec.add(new Area(rectemp));
temp = 0;
}
}
temp = 0;
}
return rec;
}
private int getAlpha(int pixel) {
return pixel >> 24 & 0xff;
}
}
Panel类
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: Panel.java
package ysh.studio.swing.window;
import java.awt.Color;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.ButtonGroup;
import javax.swing.GroupLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.border.LineBorder;
import javax.swing.table.DefaultTableModel;
public class Panel extends JPanel {
private static final long serialVersionUID = -2008255748186328423L;
private JFrame jf;
private Point pressedPoint;
private ButtonGroup buttonGroup1;
private ButtonGroup buttonGroup2;
private ButtonGroup buttonGroup3;
private JLabel jLabel1;
private JPanel jPanel1;
private JPanel jPanel2;
private JPanel jPanel3;
private JPanel jPanel4;
private JScrollPane jScrollPane1;
private JTabbedPane jTabbedPane1;
private JTable jTable1;
public Panel(JFrame jf) {
pressedPoint = new Point();
initComponents();
this.jf = jf;
}
private void initComponents() {
buttonGroup1 = new ButtonGroup();
buttonGroup2 = new ButtonGroup();
buttonGroup3 = new ButtonGroup();
jPanel1 = new JPanel();
jLabel1 = new JLabel();
jPanel2 = new JPanel();
jTabbedPane1 = new JTabbedPane();
jPanel4 = new JPanel();
jScrollPane1 = new JScrollPane();
jTable1 = new JTable();
jPanel3 = new JPanel();
jPanel1.setBorder(new LineBorder(new Color(0, 0, 0), 2, true));
jLabel1.setIcon(new ImageIcon(getClass().getResource("logo1.jpg")));
jLabel1.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent evt) {
jLabel1MouseClicked(evt);
}
public void mousePressed(MouseEvent evt) {
jLabel1MousePressed(evt);
}
public void mouseReleased(MouseEvent evt) {
jLabel1MouseReleased(evt);
}
});
jLabel1.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent evt) {
jLabel1MouseDragged(evt);
}
public void mouseMoved(MouseEvent evt) {
jLabel1MouseMoved(evt);
}
});
GroupLayout jPanel1Layout = new GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(jPanel1Layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 771, 32767).addGroup(
jPanel1Layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1, -1, 771, 32767)));
jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 107, 32767).addGroup(
jPanel1Layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1, -1, 107, 32767)));
jPanel2.setBackground(new Color(140, 66, 41));
jPanel4.setBackground(new Color(198, 62, 4));
jTable1.setAutoCreateRowSorter(true);
jTable1.setModel(new DefaultTableModel(new Object[][] {
new Object[] { null, null, null, null },
new Object[] { null, null, null, null },
new Object[] { null, null, null, null },
new Object[] { null, null, null, null },
new Object[] { null, null, null, null },
new Object[] { null, null, null, null },
new Object[] { null, null, null, null },
new Object[] { null, null, null, null },
new Object[] { null, null, null, null },
new Object[] { null, null, null, null },
new Object[] { null, null, null, null } }, new String[] {
"1", "2", "3", "4" }));
jTable1.setAutoResizeMode(4);
jTable1.setRowHeight(20);
jTable1.setSelectionBackground(new Color(51, 0, 255));
jScrollPane1.setViewportView(jTable1);
GroupLayout jPanel4Layout = new GroupLayout(jPanel4);
jPanel4.setLayout(jPanel4Layout);
jPanel4Layout.setHorizontalGroup(jPanel4Layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 750, 32767).addGroup(
jPanel4Layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, -1, 750, 32767)));
jPanel4Layout.setVerticalGroup(jPanel4Layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 440, 32767).addGroup(
jPanel4Layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, -1, 440, 32767)));
jTabbedPane1.addTab("表单", jPanel4);
GroupLayout jPanel2Layout = new GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(jPanel2Layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addGroup(
jPanel2Layout.createSequentialGroup().addContainerGap()
.addComponent(jTabbedPane1, -1, 755, 32767)
.addContainerGap()));
jPanel2Layout.setVerticalGroup(jPanel2Layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addGroup(
jPanel2Layout.createSequentialGroup().addComponent(
jTabbedPane1, -2, 471, -2).addContainerGap(-1, 32767)));
jPanel3.setBackground(new Color(44, 42, 43));
GroupLayout jPanel3Layout = new GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(jPanel3Layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 775, 32767));
jPanel3Layout
.setVerticalGroup(jPanel3Layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addGap(0,
67, 32767));
GroupLayout layout = new GroupLayout(this);
setLayout(layout);
layout
.setHorizontalGroup(layout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 775, 32767)
.addGroup(
layout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, -1, -1, 32767))
.addGroup(
layout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel2, -1, -1, 32767))
.addGroup(
layout
.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(
jPanel3,
javax.swing.GroupLayout.Alignment.TRAILING,
-1, -1, 32767)));
layout.setVerticalGroup(layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 663, 32767).addGroup(
layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
layout.createSequentialGroup()
.addComponent(jPanel1, -2, -1,
-2).addContainerGap(
552, 32767))).addGroup(
layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
layout.createSequentialGroup().addGap(
114, 114, 114).addComponent(
jPanel2, -2, -1, -2)
.addContainerGap(68, 32767)))
.addGroup(
layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(
layout.createSequentialGroup()
.addContainerGap(596, 32767)
.addComponent(jPanel3, -2, -1,
-2))));
}
private void jLabel1MouseMoved(MouseEvent evt) {
if (evt.getY() < 30) {
int x = evt.getX();
if (x > 640 && x < 660)
jLabel1.setIcon(new ImageIcon(getClass().getResource(
"logo2.jpg")));
if (x > 670 && x < 690)
jLabel1.setIcon(new ImageIcon(getClass().getResource(
"logo3.jpg")));
} else {
jLabel1.setIcon(new ImageIcon(getClass().getResource("logo1.jpg")));
}
}
private void jLabel1MouseClicked(MouseEvent evt) {
if (evt.getY() < 30) {
int x = evt.getX();
if (x > 640 && x < 660) {
jLabel1.setIcon(new ImageIcon(getClass().getResource(
"logo1.jpg")));
jf.setState(1);
}
if (x > 670 && x < 690)
windowClose();
}
}
public void exit() {
System.exit(0);
}
private void jLabel1MousePressed(MouseEvent evt) {
pressedPoint = evt.getLocationOnScreen();
}
private void jLabel1MouseDragged(MouseEvent evt) {
Point draggedPoint = evt.getLocationOnScreen();
Point location = SwingUtilities.getRoot(this).getLocationOnScreen();
int x = draggedPoint.x - pressedPoint.x;
int y = draggedPoint.y - pressedPoint.y;
SwingUtilities.getRoot(this)
.setLocation(location.x + x, location.y + y);
pressedPoint = draggedPoint;
}
private void jLabel1MouseReleased(MouseEvent mouseevent) {
}
public void windowClose() {
exit();
}
}
测试类
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: ShapWindowTest.java
package ysh.studio.swing.window;
import java.awt.Image;
import java.awt.event.WindowEvent;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.UIManager;
import com.sun.awt.AWTUtilities;
// Referenced classes of package cn.ysh.studio.swing.window:
// Panel, CreateShape
public class ShapWindowTest extends JFrame {
private static final long serialVersionUID = -6006559223284834519L;
private Panel canvas;
private final Image ico = getToolkit().getImage(
getClass().getResource("ico.jpg"));
public ShapWindowTest() throws InterruptedException, IOException {
canvas = new Panel(this);
getContentPane().add(canvas, "Center");
CreateShape shapeCreater = new CreateShape(this,
"manager.png");
shapeCreater = null;
AWTUtilities.setWindowOpacity(this, 0.95F);
setIconImage(ico);
}
protected void processWindowEvent(WindowEvent e) {
if (e.getID() == 201)
canvas.windowClose();
}
public static void main(String args[]) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
JFrame sample = new ShapWindowTest();
sample.setDefaultCloseOperation(3);
sample.setVisible(true);
sample.setTitle("Java Swing");
} catch (Exception ex) {
ex.printStackTrace();
System.out.println("error");
}
}
}