多年之前,老夫在西安中科院培訓J2EE,交了8000元,培訓三個月。出來以後找工做,正值金融危機,幸虧老夫命好,在西工大參加南京四連幫(聯創,國電,擎天,還有一個忘了)的招聘會。最終老夫以18分(總分是20分)應聘到南京擎天科技。11月份簽了三方協議,到來年的3月份毀約。當時我鬱悶壞了,在西安使勁找工做,最後都沒人要。鬱悶了,最後一個偶爾的機會,我一個哥們從一個公司辭職,讓我去頂替,結果就去了,就算還有一份工做,月薪1800,作.net。就這樣我放棄了java。廢話很少說,開始個人重拾。java
今天是要將一個C#的小程序翻譯成JAVA的,話說這Eclipse工具確實不如VS。咱們的界面以下小程序
C#版本的設計以下c#
JAVA版的設計以下ide
今天就先看一下主頁面的一些代碼和用戶註冊的一些代碼。函數
首先要實現的是主界面上當鼠標移到按鈕上,按鈕字體顏色變成紅色的功能,固然不能是一個一個去寫事件。而是給它們註冊一樣的事件處理程序。工具
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); } } } }
這段代碼的意思是循環遍歷頁面控件,若是是按鈕,就註冊一個單擊事件監聽器。this
而後直接在JFrame構造函數調.net
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執行保存等內容。