Friday, March 30, 2007

Transparent Window In Java Back With A BANG

Here is another version of code for Transparent Window in Java seems to be better than any of the previous version and has a blur effect to emulate the Vista look.Here is the code:

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.awt.image.*;



public class TransparentBackground extends JComponent

implements ComponentListener, WindowFocusListener, Runnable {

private JFrame _frame;

private BufferedImage _background;

private long _lastUpdate = 0;

private boolean _refreshRequested = true;



private Robot _robot;

private Rectangle _screenRect;



private ConvolveOp _blurOp;

public TransparentBackground(JFrame frame) {

_frame = frame;



try {

_robot = new Robot();

} catch (AWTException e) {

e.printStackTrace();

return;

}



Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();

_screenRect = new Rectangle(dim.width, dim.height);



float[] my_kernel = {

0.10f, 0.10f, 0.10f,

0.10f, 0.20f, 0.10f,

0.10f, 0.10f, 0.10f};

_blurOp = new ConvolveOp(new Kernel(3, 3, my_kernel));



updateBackground();

_frame.addComponentListener(this);

_frame.addWindowFocusListener(this);

new Thread(this).start();

}


protected void updateBackground() {

_background = _robot.createScreenCapture(_screenRect);

}



protected void refresh() {

if (_frame.isVisible() && this.isVisible()) {

repaint();

_refreshRequested = true;

_lastUpdate = System.currentTimeMillis();

}

}


protected void paintComponent(Graphics g) {

Graphics2D g2 = (Graphics2D) g;



Point pos = this.getLocationOnScreen();



BufferedImage buf = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);

buf.getGraphics().drawImage(_background, -pos.x, -pos.y, null);



Image img = _blurOp.filter(buf, null);

g2.drawImage(img, 0, 0, null);



g2.setColor(new Color(255, 255, 255, 192));

g2.fillRect(0, 0, getWidth(), getHeight());

}

public void componentHidden(ComponentEvent e) {
refresh();
}



public void componentMoved(ComponentEvent e) {

repaint();

}



public void componentResized(ComponentEvent e) {

repaint();

}



public void componentShown(ComponentEvent e) {

repaint();

}

public void windowGainedFocus(WindowEvent e) {

refresh();

}



public void windowLostFocus(WindowEvent e) {

refresh();

}

public void run() {

try {

while (true) {

Thread.sleep(100);

long now = System.currentTimeMillis();

if (_refreshRequested && ((now - _lastUpdate) > 1000)) {

if (_frame.isVisible()) {

Point location = _frame.getLocation();

_frame.setLocation(-_frame.getWidth(), -_frame.getHeight());

updateBackground();

_frame.setLocation(location);

refresh();

}

_lastUpdate = now;

_refreshRequested = false;

}

}

} catch (InterruptedException e) {

e.printStackTrace();

}

}



public static void main(String[] args) {

JFrame frame = new JFrame("Transparent Window");

TransparentBackground bg = new TransparentBackground(frame);



frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



frame.getContentPane().add(bg);

frame.pack();

frame.setSize(200, 200);

frame.setLocation(500, 500);

frame.setVisible(true);

}

}


For Mac Users you need to simply write the following

import java.swing.*;
.......
public class TransparentBackground{

.......//code here
.......//code here
.......//code here
.......//code here
 frame.setBackground(new Color(0, 0, 0, 0));
}

Transparent window "in SkinL&f No Good"!!!

Eric Bruke's blog entry in one of his blog entry said that the skin look and feel is the best alternative to making a transparent window well here is what happens when you try to move the window from one location to another



Well i have improved upon the transparent Window in Swing Hacks wait for my next post to get the code

Monday, March 26, 2007

Using XML as database with Java

here is how you can use XML file as a database,you can get the driver here

here is how you can connect to the database:

try {
// Load the DB2 JDBC Type 2 Driver with DriverManager
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}



Here is an example of XML as database
Import the package:

import com.ibm.db2.jcc.DB2Xml;

getting connection:

connection = DriverManager.getConnection(url, user, pass);

the prepare statement:

PreparedStatement stmt = connection.prepareStatement(sql);


Result Set:

option 1:
ResultSet resultSet = stmt.executeQuery();
option 2:
InputStream inputStream = resultSet.getBinaryStream(1);

option 3:
DB2Xml db2xml = (DB2Xml) resultSet.getObject(1);


Selecting a XML value:

String sql = "SELECT PID, DESCRIPTION from XMLPRODUCT where PID = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, "100-105-09");
ResultSet resultSet = stmt.executeQuery();
String xml = resultSet.getString("DESCRIPTION"); // or
InputStream inputStream = resultSet.getBinaryStream("DESCRIPTION"); // or
Reader reader = resultSet.getCharacterStream("DESCRIPTION"); // or
DB2Xml db2xml = (DB2Xml) resultSet.getObject("DESCRIPTION");

you can use other methods available in java

  • getString( )
  • getBinaryStream( )
  • getCharacterStrem( )
  • getObject( )
Inserting in XML file

String sql = "INSERT INTO xmlproduct VALUES(?, ?)";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, "100-105-09");
File binFile = new File("productBinIn.xml");
InputStream inBin = new FileInputStream(xmlFile);
stmt.setBinaryStream(2, inBin, (int) binFile.getLength());
stmt.execute();



all you need is the db2 drivers you can find it here

https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?lang=en_US&source=swg-dm-db2jdbcdriver


Sunday, March 25, 2007

Transparent Window Looking Better

Thanks to Eric Bruke's blog entry i got to know the problems in the problem with the Transparent window so here are the tweaks remove the threading part from the program but that might affect the speed of processing of your computer so copy and use the following alternative code thraeding still involved but a few minor changes like i changed the refresh period and the quickRrefresh() that was put there as a comment, i removed the coments.The new improved code and replaces refresh() in "public void run()" with quickRefresh()
here is the improved code:

import java.awt.*;
import java.util.Date;
import javax.swing.*;
import java.awt.event.*;
public class BGTest1 {

public static void main(String[] args) {
JFrame frame = new JFrame("Transparent Window");
TransparentBackground bg = new TransparentBackground(frame);
bg.setLayout(new BorderLayout());

JButton button = new JButton("This is a button");
bg.add("North",button);
JLabel label = new JLabel("This is a label");
bg.add("South",label);
frame.getContentPane().add("Center",bg);
frame.pack();
frame.setSize(300,300);
frame.show();
}

}
class TransparentBackground extends JComponent
implements ComponentListener, WindowFocusListener,
Runnable {
private JFrame frame;
protected Image background;
private long lastupdate = 0;
public boolean refreshRequested = true;

public TransparentBackground(JFrame frame) {
this.frame = frame;

updateBackground();
frame.addComponentListener(this);
frame.addWindowFocusListener(this);
new Thread(this).start();
}

public void updateBackground() {
try {
Robot rbt = new Robot();
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension dim = tk.getScreenSize();
background = rbt.createScreenCapture(
new Rectangle(0,0,(int)dim.getWidth(),(int)dim.getHeight()));
} catch (Exception ex) {
p(ex.toString());
ex.printStackTrace();
}
}

public void paintComponent(Graphics g) {
Point pos = this.getLocationOnScreen();
Point offset = new Point(-pos.x,-pos.y);
g.drawImage(background,offset.x,offset.y,null);
}


public void componentShown(ComponentEvent evt) { repaint(); }
public void componentResized(ComponentEvent evt) { repaint(); }
public void componentMoved(ComponentEvent evt) { repaint(); }
public void componentHidden(ComponentEvent evt) { }

public void windowGainedFocus(WindowEvent evt) { refresh(); }
public void windowLostFocus(WindowEvent evt) { refresh(); }

public void refresh() {
if(this.isVisible() && frame.isVisible()) {
repaint();
refreshRequested = true;
lastupdate = new Date().getTime();
}
}


private boolean recurse = false;
public void quickRefresh() {
p("quick refresh");
long now = new Date().getTime();
if(recurse ||
((now - lastupdate) < recurse =" true;" location =" frame.getLocation();" recurse =" false;" lastupdate =" now;" now =" new"> 5)) {
if(frame.isVisible()) {
Point location = frame.getLocation();
frame.hide();
updateBackground();
frame.show();
frame.setLocation(location);
quickRefresh();
}
lastupdate = now;
refreshRequested = false;
}
}
} catch (Exception ex) {
p(ex.toString());
ex.printStackTrace();
}
}


public static void p(String str) {
System.out.println(str);
}

}

Get The Best Java Books In One Place

I have complied together the best of the best java reference books and the related books available today.It is to help all the developers get the maximum with minimum efforts.Hope that you like my compilation....

Here is the link to the site:

http://astore.amazon.com/javcra-20

below is the preview.Enjoy!!!!! ;-)


Create A Transparent Window in Java

I recently read a post the read Another Thing Java Cannot Do In Java. And it read:
"you cannot create a popup window shaped like this:

Thought Bubble

Because Java does not support transparent windows"

Well here is a cool code to create "Transparent Window" in java.For more you can go in for this awesome book Swing Hacks by Joshua Marinnaci it is the best book with many more awesome tricks i have a copy and recommend to everyone(a must buy for those who are seriously interested in java)

import java.awt.*;
import java.util.Date;
import javax.swing.*;
import java.awt.event.*;
public class BGTest1 {

public static void main(String[] args) {
JFrame frame = new JFrame("Transparent Window");
TransparentBackground bg = new TransparentBackground(frame);
bg.setLayout(new BorderLayout());

JButton button = new JButton("This is a button");
bg.add("North",button);
JLabel label = new JLabel("This is a label");
bg.add("South",label);
frame.getContentPane().add("Center",bg);
frame.pack();
frame.setSize(300,300);
frame.show();
}

}
class TransparentBackground extends JComponent
implements ComponentListener, WindowFocusListener,
Runnable {
private JFrame frame;
protected Image background;
private long lastupdate = 0;
public boolean refreshRequested = true;

public TransparentBackground(JFrame frame) {
this.frame = frame;

updateBackground();
frame.addComponentListener(this);
frame.addWindowFocusListener(this);
new Thread(this).start();
}

public void updateBackground() {
try {
Robot rbt = new Robot();
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension dim = tk.getScreenSize();
background = rbt.createScreenCapture(
new Rectangle(0,0,(int)dim.getWidth(),(int)dim.getHeight()));
} catch (Exception ex) {
p(ex.toString());
ex.printStackTrace();
}
}

public void paintComponent(Graphics g) {
Point pos = this.getLocationOnScreen();
Point offset = new Point(-pos.x,-pos.y);
g.drawImage(background,offset.x,offset.y,null);
}


public void componentShown(ComponentEvent evt) { repaint(); }
public void componentResized(ComponentEvent evt) { repaint(); }
public void componentMoved(ComponentEvent evt) { repaint(); }
public void componentHidden(ComponentEvent evt) { }

public void windowGainedFocus(WindowEvent evt) { refresh(); }
public void windowLostFocus(WindowEvent evt) { refresh(); }

public void refresh() {
if(this.isVisible() && frame.isVisible()) {
repaint();
refreshRequested = true;
lastupdate = new Date().getTime();
}
}

/*
private boolean recurse = false;
public void quickRefresh() {
p("quick refresh");
long now = new Date().getTime();
if(recurse ||
((now - lastupdate) < recurse =" true;" location =" frame.getLocation();" recurse =" false;" lastupdate =" now;" now =" new"> 1000)) {
if(frame.isVisible()) {
Point location = frame.getLocation();
frame.hide();
updateBackground();
frame.show();
frame.setLocation(location);
refresh();
}
lastupdate = now;
refreshRequested = false;
}
}
} catch (Exception ex) {
p(ex.toString());
ex.printStackTrace();
}
}


public static void p(String str) {
System.out.println(str);
}

}

here is the link to the book again

a must buy for those who are seriously interested in java