多年以前,老夫在西安中科院培训J2EE,交了8000元,培训三个月。出来之后找工作,正值金融危机,幸好老夫命好,在西工大参加南京四连帮(联创,国电,擎天,还有一个忘了)的招聘会。最终老夫以18分(总分是20分)应聘到南京擎天科技。11月份签了三方协议,到来年的3月份毁约。当时我郁闷坏了,在西安使劲找工作,最后都没人要。郁闷了,最后一个偶尔的机会,我一个哥们从一个公司辞职,让我去顶替,结果就去了,就算还有一份工作,月薪1800,做.net。就这样我放弃了java。废话不多说,开始我的重拾。
今天是要将一个C#的小程序翻译成JAVA的,话说这Eclipse工具确实不如VS。我们的界面如下
C#版本的设计如下
JAVA版的设计如下
今天就先看一下主页面的一些代码和用户注册的一些代码。
首先要实现的是主界面上当鼠标移到按钮上,按钮字体颜色变成红色的功能,当然不能是一个一个去写事件。而是给它们注册同样的事件处理程序。
private void RegisterEvent() { foreach (var contrl in this.Controls) { if (contrl.GetType() == typeof(Button)) { Button btn = contrl as Button; btn.MouseHover += delegate(object sender, EventArgs e) { btn.BackColor = Color.Crimson; }; btn.MouseLeave += delegate(object sender, EventArgs e) { btn.BackColor = Color.White; }; if (btn.Name != "btnLogOut") { btn.Click += delegate(object sender, EventArgs e) { this.ShowDialogForm(sender); }; btn.KeyDown += delegate(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { this.ShowDialogForm(sender); } }; } } } }
那么在JAVA中如何一下子注册所有按钮的事件呢
private void RegisterButtonEvent(JComponent component) {
Component[] childComponents = component.getComponents();
if (childComponents.length > 0) {
for (Component cp : childComponents) {
if (cp instanceof JButton) // 如果获取的元素是button
{
((JButton) cp)
.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
((JButton) e.getComponent())
.setForeground(Color.red);
}
});
((JButton) cp).addMouseListener(new MouseAdapter() {
@Override
public void mouseExited(MouseEvent e) {
((JButton) e.getComponent())
.setForeground(Color.black);
}
});
} else {
RegisterButtonEvent((JComponent) cp);
}
}
}
}
这段代码的意思是循环遍历页面控件,如果是按钮,就注册一个单击事件监听器。
然后直接在JFrame构造函数调
RegisterButtonEvent(this.contentPane);
这样就可以实现所有按钮的事件。
接下来就是主页面上面的时间,大家都知道,在C#中有个控件叫Timer,很容易实现时间的走动。
private void timer1_Tick(object sender, EventArgs e) { this.tsslTime.Text = DateTime.Now.ToString(); }
那么Java中可以没有这个控件,咋办呢,只能用线程了,每秒sleep一次。
private class Timer extends Thread {
private final int interval = 1000;
public Timer() {
}
public void run()
{
while(1==1)
{
try {
Thread.sleep(interval);
SimpleDateFormat df = new SimpleDateFormat(
"yyyy-MM-dd hh:mm:ss");
labCurTime.setText(df.format(new Date()));
}
catch(InterruptedException ex)
{
ex.printStackTrace();
}
}
}
}
写好这个线程类之后,在构造函数调用,便可以实现每秒时间都在变化。
Timer tim=new Timer();
tim.start();
OK,这个是主界面的一些介绍,接下来我们看如何从主界面弹出另一个frame。
btnUserRegister.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
FrmUserRegister frmUserReg = new FrmUserRegister();
frmUserReg.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
StartMain.SetMidScreen(frmUserReg);
frmUserReg.setVisible(true);
}
});
给注册用户按钮注册一个事件监听器,实现鼠标单击事件。new 一个jframe窗口,设置其关闭操作我dispose。即点击关闭X之后,该界面立即销毁。
StartMain.SetMidScreen方法是让弹出的窗口居中显示在屏幕。代码如下
public static void SetMidScreen(Component jcomponent)
{
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
int width = dimension.width;
int height = dimension.height;
jcomponent.setLocation((width - jcomponent.getWidth()) / 2, (height - jcomponent.getHeight()) / 2);
}
这段代码不做解释,一看就明白。OK,最后一个点,我不想在用户只是在点击X的会后关闭。我想放置一个按钮关闭,那么怎么办呢?
btnCancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
((JFrame)(contentPane.getTopLevelAncestor())).dispose();
}
});
第一种方式,直接根据contentPane拿到最上层的component,即jframe,然后dispose。
第二种方式,写另外一个方法,然后直接在这个方法中dispose。
private void WindowClose()
{
this.dispose();
}
建议使用第二种,简单效率高。
这样的话在点击取消按钮的时候该窗口会被关掉。好了,时间不早了,下节主要是对这个界面功能如何实现的一个讲解,牵涉java连接SqlServer2008,JDBC执行保存等内容。