這篇文章主要介紹了java通過JFrame做一個(gè)登錄系統(tǒng)的界面完整代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)友誼免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
在java的JFrame內(nèi)通過創(chuàng)建匿名對(duì)象的方式做登錄界面
package com.sxt;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class LoginFrame extends JFrame{
JTextField txtname=new JTextField();
JPasswordField txtpass=new JPasswordField();
JButton bl=new JButton("登錄");
JButton bg=new JButton("關(guān)閉");
//構(gòu)造無(wú)參構(gòu)造器把主要的方法放在構(gòu)造器里,然后在main方法里面調(diào)
public LoginFrame(){
setBounds(25,25,250,250);
Container c = getContentPane();
c.setLayout(new GridLayout(4,2,10,10));
c.add(new JLabel("用戶名"));
c.add(txtname);
c.add(new JLabel("密碼"));
c.add(txtpass);
c.add(bl);
c.add(bg);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
//注意:此處是匿名內(nèi)部類
bg.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
}
);
//注意:此處是匿名內(nèi)部類
bl.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
public static String c(String paramString) {
if ((paramString == null) || (paramString.length() == 0)) throw new IllegalArgumentException("String to encript cannot be null or zero length"); // paramString字符串不能為空,否則拋出異常
StringBuffer localStringBuffer1 = newStringBuffer();
try { MessageDigest localMessageDigest = MessageDigest.getInstance("MD5"); //建立一個(gè)md5消息摘要對(duì)象
byte[] arrayOfByte1 = paramString.getBytes();
localMessageDigest.update(arrayOfByte1); // 把paramString數(shù)據(jù)放入arrayOfByte1,然后更新消息摘要對(duì)象(這邊估計(jì)update的參數(shù)必須是byte類型的,所以才將paramString做了個(gè)類型轉(zhuǎn)換)
byte[] arrayOfByte2 = localMessageDigest.digest(); //將更新的摘要內(nèi)容取出來,這邊是已經(jīng)經(jīng)過md5運(yùn)算了。
int i = 0;
while (true) {
int j = arrayOfByte2.length;
if (i = j)
label66: return localStringBuffer1.toString().toUpperCase(); //如果ij。說明是摘要數(shù)據(jù)的長(zhǎng)度為0,返回localStringBuffer1就行了?;蛘呤钱?dāng)前的數(shù)據(jù)已經(jīng)取完。
if ((arrayOfByte2[i] 0xFF) = 16) //如果第i個(gè)字節(jié)大于16,退出循環(huán)。
break;
StringBuilder localStringBuilder = new StringBuilder("0"); //新建一個(gè)StringBuilder對(duì)象。
String str1 = Integer.toHexString(arrayOfByte2[i] 0xFF);//這邊的arrayOfByte2[i] 0xFF的意思相當(dāng)于將字符串轉(zhuǎn)化成16進(jìn)制的整數(shù)了,再把它轉(zhuǎn)化成16進(jìn)制的字符串。
String str2 = str1;
StringBuffer localStringBuffer2 = localStringBuffer1.append(str2); //將字符串放進(jìn) localStringBuffer2里面
i += 1; //循環(huán)下一個(gè)字節(jié)的內(nèi)容
}
String str3 = Integer.toHexString(arrayOfByte2[i] 0xFF); // 這邊的i是跳出循環(huán)的i了,次數(shù)arrayOfByte2[i] 0xFF) = 16
StringBuffer localStringBuffer3 = localStringBuffer1.append(str3);
}
catch (NoSuchAlgorithmException localNoSuchAlgorithmException)
{ localNoSuchAlgorithmException.printStackTrace(); break label66: } }
完成的大體功能應(yīng)該是;生成一個(gè)摘要,把摘要中的數(shù)據(jù)按照某種方式存儲(chǔ)。具體干什么我沒大看懂
我做過的一個(gè)項(xiàng)目是使用XML傳輸來實(shí)現(xiàn)的。首先客戶端登錄請(qǐng)求,服務(wù)器判斷是否合法,合法就返回一個(gè)ticket碼,客戶端需要記錄這個(gè)ticket碼,服務(wù)器也需要將ticket記錄到數(shù)據(jù)庫(kù)里面,以后客戶端的連接就通過ticket來判斷識(shí)別是哪個(gè)用戶。其實(shí)用XML做數(shù)據(jù)交換是肯定能實(shí)現(xiàn)的,只是麻煩的點(diǎn),但是好處是對(duì)于C做的客戶端照樣通用。如果你只是需要簡(jiǎn)單的登錄的話,也可以把XML交換換成HTTP請(qǐng)求,將用戶名和密碼放在請(qǐng)求報(bào)文的頭里面。
在Android上怎樣實(shí)現(xiàn)JAVA和JS交互呢?Android的webview是基于webkit內(nèi)核的,webview中集成了js與java互調(diào)的接口函數(shù),通過addJavas criptInterface方法,可以將Java的類注冊(cè)進(jìn)webkit,給網(wǎng)頁(yè)上的js進(jìn)行調(diào)用,而且還可以通過loadUrl方法是給webkit傳遞一個(gè)URL,供瀏覽器來進(jìn)行解析,實(shí)現(xiàn)Java和js交互。
要想運(yùn)行網(wǎng)頁(yè)上的js腳本,webview必須設(shè)置支持Javas cript。
Java代碼
1mWebview.getSettings().setJavas criptEnabled(true);
然后是設(shè)置webview要加載的網(wǎng)頁(yè):
web的網(wǎng)頁(yè):webView.loadUrl("");
本地的網(wǎng)頁(yè):webView.loadUrl(""); //本地的存放在:assets文件夾中
webview做完基本的初始化后我們還要要給它,加進(jìn)一個(gè)回調(diào)的代理類Javas criptInterface,并給它一個(gè)調(diào)用的名稱:ncp
Java代碼
1mWebView.addJavas criptInterface(new Javas criptInterface(),"ncp");
Javas criptInterface可以是一個(gè)普通的Java類,類實(shí)現(xiàn)的方法,均可被js回調(diào):
Java代碼
final class Javas criptInterface {
public int callOnJs() {
return 1000;
}
public void callOnJs2(String mode) {
//TODO
}
}
Java要調(diào)用js的方法,只需知道js的方法名稱即可:
Java代碼
1mWebView.loadUrl("javas cript:onSaveCallback()");
你可以使用以下代碼代替你的 ACTION_CALL(推薦):
Intent?intent?=?new?Intent(Intent.ACTION_DIAL);
也可以參考這里,在 manifest?中添加
android.permission.PHONE_CALL
的權(quán)限,并且在撥打電話之前檢驗(yàn)權(quán)限:
//檢查是否已經(jīng)給了權(quán)限
int?checkpermission=?ContextCompat.checkSelfPermission(getApplicationContext(),Manifest.permission.ACCESS_FINE_LOCATION);
if(checkpermission!=PackageManager.PERMISSION_GRANTED){?//沒有給權(quán)限,申請(qǐng)
//參數(shù)分別是當(dāng)前活動(dòng),權(quán)限字符串?dāng)?shù)組,requestcode
ActivityCompat.requestPermissions(MainActivity.this,new?String[]{Manifest.permission.ACCESS_FINE_LOCATION},?1);
//?暫時(shí)使用?DIAL?代替?CALL
Intent?intent?=?new?Intent(Intent.PHONE_DIAL);
intent.setData(Uri.parse("tel:"+number));
startActivity(intent);
}?else?{
//?直接使用?CALL
Intent?intent?=?new?Intent(Intent.PHONE_CALL);
intent.setData(Uri.parse("tel:"+number));
startActivity(intent);
}
然后添加一個(gè)方法:
@Override
public?void?onRequestPermissionsResult(int?requestCode,?@NonNull?String[]?permissions,?@NonNull?int[]?grantResults)?{
super.onRequestPermissionsResult(requestCode,?permissions,?grantResults);
//grantResults數(shù)組與權(quán)限字符串?dāng)?shù)組對(duì)應(yīng),里面存放權(quán)限申請(qǐng)結(jié)果
if(grantResults[0]==?PackageManager.PERMISSION_GRANTED){
//?放已授權(quán)的處理方法
}else{
//?放拒絕授權(quán)的處理方法
Toast.makeText(MainActivity.this,"拒絕授權(quán)",Toast.LENGTH_SHORT).show();
}
}
參考:CSDN