————————————在JPanel中加進背景圖片————————————
//import javax swing
import javax.swing.JPanel;
import javax.swing.ImageIcon;

//import java awt
import java.awt.Graphics;
import java.awt.Dimension;

/**
* This class defines a panel that can draw an image in the background.
* To do this,I overrid the paintCompponent method,that's the
* only thing necessery.
*/

public class ImageBackgroundPanel extends JPanel {
? private ImageIcon image = null;

? public ImageBackgroundPanel(ImageIcon image) {
??? this.image = image;
? }

? protected void paintComponent(Graphics g) {
??? setOpaque(true);
??? super.paintComponent(g);

??? Dimension d = getSize();
??? for( int x = 0; x < d.width; x += image.getIconWidth() )
????? for( int y = 0; y < d.height; y += image.getIconHeight() )
????? g.drawImage( image.getImage(), x, y, null, null );

? }
}

————————————自己load一個主頁————————————
package org.PhotoResizer.test;

import java.io.*;

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;

public class HyperLink
??? extends JFrame {
? JEditorPane jEditorPane1 = new JEditorPane();
? JScrollPane jScrollPane1 = new JScrollPane();

? public HyperLink() {
??? try {
????? jbInit();
??? }
??? catch (Exception e) {
????? e.printStackTrace();
??? }
? }

? public static void main(String[] args) {
??? HyperLink HyperLink = new HyperLink();
??? HyperLink.show();
? }

? private void jbInit() throws Exception {
??? jEditorPane1.setText("Hello");
//??? String url="file:"+System.getProperty("user.dir")+System.getProperty("file.separator")+
//??????? "java.util.Date.html";
//??? try {
//????? jEditorPane1.setPage(url);
//??? }
//??? catch (Exception ex) {
//????? throw new Exception(ex);
//??? }
??? this.setDefaultCloseOperation(EXIT_ON_CLOSE);
??? this.getContentPane().add(jScrollPane1, BorderLayout.CENTER);
??? jScrollPane1.getViewport().add(jEditorPane1, null);
??? jEditorPane1.setEditable(false);
??? Runtime rt = Runtime.getRuntime();
??? try {
//change here of the URL
????? jEditorPane1.setPage("http://www.163.com");
??? }
??? catch (Exception ex) {

??? }

??? jEditorPane1.addHyperlinkListener(new HyperlinkListener() {
????? public void hyperlinkUpdate(HyperlinkEvent hle) {
??????? if (hle.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
????????? Runtime rt = Runtime.getRuntime();

????????? try {
??????????? jEditorPane1.setPage(hle.getURL());
??????????? //如果你想要連接系統瀏覽器的話。。。
//??????????? rt.exec("cmd /c start " + hle.getURL());
????????? }
????????? catch (IOException e1) {
??????????? System.err.println(e1);
????????? }
??????? }
????? }
??? });

? }
}

————————————讓窗口始終在前————————————
1,The upstair tell you a best way.

2,You can extends JWindow
override show() like this:
public void show()
{
super.show();
this.requestFocus();
}
and then add a window listener for
the focus lost event:

addFocusListener (new java.awt.event.FocusAdapter () {
public void focusLost (java.awt.event.FocusEvent evt) {
this.toFront();
}
}
);
It seems to work for me...

3.You can also try to use thread, I recommend this way.
/**
* Call this from class consructor
*/
public void initialize() {
TopThread top = new TopThread();
top.start();
}

/**
* Keep JWindow on top (inner class)
*/
class TopThread extends Thread {
public void run() {
while(true) {
toFront();
/**
* Let 10 milliseconds for other code to execute
*/
try {
Thread.sleep(10);
}
catch(Exception e) {
// do what you wanna do
}
}
}
}

You can see:http://forum.java.sun.com/thread.jsp?forum=57&thread=166992
That's some others discuss it.
————————————帶行號的jtable類————————————
用另一個可以顯示行號的JTable或JList做JScrollPane的setRowHeaderView(Component view)

下面是我臨時做的一個最簡單的例子

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.table.*;

public class LineNumberTable extends JFrame {
??? public static void main(String[] args) {
??????? try{
??????????? UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
??????? } catch(Exception e){
??????? }
??????? LineNumberTable jl=new LineNumberTable();
??????? jl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
??????? jl.setBounds(100,100,600,400);
??????? jl.show();
??? }

??? public LineNumberTable() {
??????? Container co = super.getContentPane();
??????? co.setLayout(new BorderLayout());
??????? JTable table = new JTable(100,5);
??????? JScrollPane sp = new JScrollPane(table);
??????? RowHeader rowHeader=new RowHeader(table);
??????? sp.setRowHeaderView(rowHeader);
??????? sp.getRowHeader().setPreferredSize(new Dimension(35,10));
??????? co.add(sp,BorderLayout.CENTER);
??? }
}

class RowHeader extends JTable{
? public RowHeader(JTable table) {
????? LineNumberModel listModel=new LineNumberModel(table.getModel());
????? this.setModel(listModel);
????? this.setRowHeight(table.getRowHeight());
????? this.getColumn("").setCellRenderer(new RowHeaderRenderer());
????? this.setAutoscrolls(false);
? }
}

class LineNumberModel extends AbstractTableModel{
????? TableModel model;
????? public LineNumberModel(TableModel mod){
????????? this.model=mod;
????? }
????? public int getRowCount(){
????????? return model.getRowCount();
????? }
????? public int getColumnCount(){
????????? return 1;
????? }
????? public String getColumnName(int columnIndex){
????????? return "";
????? }
????? public Object getValueAt(int rowIndex,
???????????????????????? int columnIndex){
????????? return "";
????? }
????? public boolean isCellEditable(int row, int column) {
????????? return false;
????? }
}

class RowHeaderRenderer? extends JButton implements TableCellRenderer {
? Insets zeroInsets = new Insets(0,0,0,0);
? RowHeaderRenderer() {
??? setOpaque(true);
??? setBorder(UIManager.getBorder("TableHeader.cellBorder"));
??? setHorizontalAlignment(CENTER);
? }
? public Insets getInsets(){
????? return zeroInsets;
? }

? public Component getTableCellRendererComponent(JTable table, Object value,
????????????????????????? boolean isSelected, boolean hasFocus, int row, int column) {
????? this.setText(""+(row+1));
????? return this;
? }
}
————————————?? ————————————
————————————?? ————————————
————————————?? ————————————
————————————?? ————————————