emacs编写java swing程序

长平狐 发布于 2012/08/28 16:37
阅读 143
收藏 0
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);
   
    }
}


原文链接:http://blog.csdn.net/sheismylife/article/details/1900994
加载中
返回顶部
顶部