Linux下面使用emacs 編寫java程式,而不使用eclipse、netbeans等IDE工具,給我一種很酷的感覺。
其實最主要的要知道一些細節:
1)jdk1.6版本後面運行程式類通常格式如下:
java packageName.className
並且運行這行命令的當前路徑應該在packageName同名目錄的外面
2)如果兩個類同屬於一個package,先使用javac編譯好一個類A,另一個依賴A的類B編譯時間用如下命令:
javac -d . B.java
我使用 了makefile來解決第二個編譯問題:
JFLAGS = -g
JC = javac -d .
.SUFFIXES: .java .class
.java.class:
$(JC) $(JFLAGS) $*.java
CLASSES = /
MainFrame.java/
Main.java
default: classes
classes: $(CLASSES:.java=.class)
clean:
$(RM) *.class
可以參考下面的文章來查看我使用的makefile的文法:
http://www.cs.swarthmore.edu/~newhall/unixhelp/javamakefiles.html
大意是make命令會按照如下順序執行:
1)default:classes
2)classes: $(CLASSES:.java=.class) //改行實際上是進行尾碼名的替換,將.java都換成.class
3)產生MainFrame.class,當然會導致編譯MainFrame.java
4)產生Main.class,當然會導致編譯Main.java
結果是建立了一個子目錄freebird(和package同名),並且兩個類的.class檔案都已經產生在該目錄內。
然後我就可以使用java freebird.Main 來執行該程式了。(記住在子目錄freebird的外面執行)
3)Java Swing編程技巧
讓Form視窗位於螢幕中央:
首先要獲得螢幕的尺寸,通過調用Toolkit.getDefaultToolkit()來獲得Toolkit對象的引用,該對象提供的getScreenSize方法可以或得Dimension對象的引用,該對象的width和height屬性就是螢幕的寬度和高度。下面的公式可以獲得讓指定尺寸的視窗位於螢幕中央。
x=(screenWidth-formWidth)/2 ; y=(screenHeight-formHeight)/2
JFrame的多層結構:
JFrame從底部向上包括了根面板、層級面板、玻璃面板和內容面板。通常我們的控制項都是添加到內容面板上,即便你直接調用JFrame.add方法,jdk實現代碼仍然也是將控制項添加到內容面板上。
我們可以通過JFrame.getContentPane方法來獲得該內容面板。
下面的代碼建立了一個唯讀文本控制項,並加入到內容面板上。
pingJiaName=new JTextField("hello",20);
add(pingJiaName);
pingJiaName.setEditable(false);
布局管理器:
我這裡只使用了FlowLayout,BorderLayout和Panel。
FlowLayout類似於html的流布局,控制項總是自動的從上到下,從左至右排列,當一行沒有足夠的空間時,控制項會自動排在下一行。我們還可以設定控制項之間的水平和垂直的間隔距離,以及對齊(置中,偏左或者偏右)。
BorderLayout將視窗分成東、西、南、北、中五個地區。我們可以將控制項指定在其中一個地區上。Panel可以被看成一個擁有容器功能的控制項,它可以包含其他的控制項,也可以作為一個控制項放置在別的容器裡。
下面的一個例子可以解釋這三個組件合作的效果。(注意,FlowLayout是預設布局)
package freebird;
import java.awt.Frame;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
public class MainFrame extends JFrame
{
private JTextField pingJiaName;
private JPanel panel;
public MainFrame()
{
super("努力學習日語,每天都要進步一點");
setSize(1024,768);
Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
setLocation((screenSize.width-1024)/2,(screenSize.height-768)/2);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
initComponents();
}
private void initComponents()
{
panel=new JPanel();
//panel.setLayout(new BorderLayout());
pingJiaName=new JTextField("hello",20);
pingJiaName.setEditable(false);
panel.add(pingJiaName);
add(panel,BorderLayout.NORTH);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
}
}