您的位置:首页 > 编程语言 > Java开发

自己的作品界面---类似360杀毒软件的界面

2014-09-22 19:15 330 查看
自己的作品界面---类似360杀毒软件的界面

       软件界面,虽然有点丑,对比起我做的第一个几近黑白的界面来说,已经进步很大了(这是第二个)。刚说要做界面的时候,我有种被雷击中的感觉,用java蛮久了,从来没做过界面。唯一做过界面的语言是vb,人家是直接拖控件就好了。java的界面,好像没法脱控件。找了个资料,是仿360的,给了代码,但是没有给图片。开始蛮高兴的额,直接考下来了。后面运行加看代码才发现,没有图片,简直就是不可能运行。一直都不想动,就一直拖着。后面拖到离交作品还有一周了,实在拖不下去了,开始硬着头皮看代码。看完代码发现和我自己需的差距蛮大,然后就开始改代码。花了两天时间改代码,P图片,终于基本弄完。真心觉得做个软件不容易,即使是一个小软件(当然,我是一个人做的,没有队友)。然后就特别佩服那种界面做的好看的,每个鼠标动作都有不同效果的,真心不容易,每个动作都是一张或好几张图片才能完成。写动作带代码不说,就P出来那个多效果的图片就不容易。

      做完这个东东发现,其实java界面没有想象中那么难做吗,还是很人性化的。所以,面临做界面的孩子,不要慌,要是你有较好的java基础,一天时间就能搞懂这个东东。只是,硬着头皮也要做,不要退缩就是了。

      现在就拿出效果和代码过来和大家分享下。如果想要运行看效果,请到我的资源下载里面找到图片集,把图集放到bin文件下就可以了的。另外,记得把代码里面调用其他类的地方给注释一下,以免一直报错,那是后台程序,不会影响界面的使用。记得下载chart2d第三方包哦。

        提醒下,这个作品再2014年参加了湖南省程序设计大赛应用类软件设计大赛,请过近比赛的孩子避嫌(上传资料,仅供参考。直接使用,后果自负!)。



(网络监测界面)



(参数设置界面)

不多说,直接上代码。代码略长,请耐心看。

<span style="font-size:18px;">package com.ids.windows;

import info.monitorenter.gui.chart.Chart2D;
import info.monitorenter.gui.chart.IAxis;
import info.monitorenter.gui.chart.ITrace2D;
import info.monitorenter.gui.chart.traces.Trace2DLtd;
import info.monitorenter.gui.chart.views.ChartPanel;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Window;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;
import java.io.File;
import java.io.IOException;
import java.util.Properties;
import java.util.Timer;
import java.util.TimerTask;

import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;

import com.ids.datahandle.UserData;
import com.ids.mitjudge.Judge;

/**
*
*/
public class windows {

/**
*
*/
public windows() {
}

public static void main(String[] args) {

MainPanel main =new MainPanel();
main.setVisible(true);
main.setAlwaysOnTop(true);
}
}

class MainPanel extends JFrame implements MouseListener, MouseMotionListener {

private static final long serialVersionUID = -8303249428878144366L;
/** 容器 */
private Container con = null;
/** 图片获取 */
private Toolkit tkit = null;
/** 各种标签 */
private JLabel minLabel, closeLabel, mssfhLabel, mcpsjLabel,
mbdcsLabel,zdsmLabel, csszLabel;
/** 各种面板 */
private JPanel bdcsPanel, headPanel, listPanel,showDataPanel,changPanel;
public JTextArea showData;
private int operType = 1;

Font font=new Font("楷体",Font.BOLD,14);

Trace2DLtd trace;
Chart2D chart ;
ChartPanel chartPanel;
Judge judge;
JLabel jl, jl1, tell,add,sub,add1,sub1,add2,sub2;
private JLabel start, stop,chang2;
JFileChooser fc = new JFileChooser();
UserData ud;
int changData=0;
String path=null;

/** 构造函数,生成整个窗口 */
public MainPanel() {

super();
initSelf();
combinElems();
}

/** 窗口初始化 */
public void initSelf() {
this.setUndecorated(true);
con = this.getContentPane();
con.setLayout(new BorderLayout());
this.setSize(642, 482);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("IDS");// 窗口命名
tkit = new Toolkit();// 图片处理对象
this.setIconImage(tkit.getImage("ico.gif"));// 标志
}

public void combinElems() {
headPanel = new JPanel(new BorderLayout());
headPanel.setOpaque(false);//透明
new Dragger(this, headPanel);

JPanel h1Panel = new JPanel();
h1Panel.setOpaque(false);//透明
h1Panel.setPreferredSize(new Dimension(642, 17));
h1Panel.setLayout(new FlowLayout(2, 0, 0));
minLabel = new JLabel(tkit.getImgageIcon("h1_min_01.gif"));// 缩小系统到托盘
minLabel.setToolTipText("最小化系统");
minLabel.addMouseListener(this);

closeLabel = new JLabel(tkit.getImgageIcon("h1_close_01.gif"));// 退出系统
closeLabel.setToolTipText("关闭系统");
closeLabel.addMouseListener(this);

JLabel name=new JLabel();
name.setText("基于改进的DCA算法与FCM算法的网络入侵智能报警系统 ");
name.setFont(new Font("仿宋",Font.BOLD,12));
name.setForeground(Color.black);

h1Panel.add(name);
h1Panel.add(minLabel);
h1Panel.add(closeLabel);

JPanel h2Panel=new JPanel();
h2Panel.setOpaque(false);//透明
h2Panel.setPreferredSize(new Dimension(642, 85));
h2Panel.setLayout(null);

JLabel iconLabel=new JLabel(tkit.getImgageIcon("ico.gif"));
iconLabel.setBounds(40, 0, 85, 85);

JLabel context=new JLabel();
context.setText("IDS-让您的网络更安全");
context.setFont(new Font("楷体",Font.BOLD,20));
context.setBounds(140, 25, 400, 40);
context.setForeground(Color.black);

h2Panel.add(iconLabel);// 软件标志
h2Panel.add(context);

headPanel.add(BorderLayout.NORTH, h1Panel);// 把顶层面板加到容器中
headPanel.add(BorderLayout.CENTER, h2Panel);// 把中间面板加到容器中

JPanel bPanel = new JPanel(new BorderLayout());
bPanel.setOpaque(false);//透明

JPanel btmpPanel = new JPanel();
btmpPanel.setPreferredSize(new Dimension(400, 37));
btmpPanel.setLayout(new FlowLayout(0, 0, 0));
btmpPanel.setOpaque(false);//透明
//网络监测
// 本地检测
mbdcsLabel = new JLabel(tkit.getImgageIcon("m_bdcs_00.gif"));// 样本检测背景
mbdcsLabel.addMouseListener(this);
mbdcsLabel.setToolTipText("网络监测");

mssfhLabel = new JLabel(tkit.getImgageIcon("m_ssfh_01.gif"));// 网络检测背景
mssfhLabel.addMouseListener(this);
mssfhLabel.setToolTipText("样本检测");

mcpsjLabel = new JLabel(tkit.getImgageIcon("m_cpsj_01.gif"));// 流量分析背景
mcpsjLabel.addMouseListener(this);
mcpsjLabel.setToolTipText("流量分析");

csszLabel = new JLabel(tkit.getImgageIcon("m_cssz_01.gif"));// 参数设置背景
csszLabel.addMouseListener(this);
csszLabel.setToolTipText("参数设置");

JLabel JLabel9=new JLabel(tkit.getImgageIcon("9.gif"));
JLabel JLabel91=new JLabel(tkit.getImgageIcon("9.gif"));
JLabel JLabel8=new JLabel(tkit.getImgageIcon("8.gif"));
JLabel JLabel81=new JLabel(tkit.getImgageIcon("8.gif"));
JLabel JLabel82=new JLabel(tkit.getImgageIcon("8.gif"));

btmpPanel.add(JLabel9);//
btmpPanel.add(mssfhLabel);
btmpPanel.add(JLabel8);// 大选项卡小背景
btmpPanel.add(mbdcsLabel);
btmpPanel.add(JLabel81);
btmpPanel.add(mcpsjLabel);
btmpPanel.add(JLabel82);
btmpPanel.add(csszLabel);
btmpPanel.add(JLabel91);//

JPanel mainPanel=new JPanel();
mainPanel.setOpaque(false);//透明
mainPanel.setPreferredSize(new Dimension(642, 343));

zdsmLabel = new JLabel(tkit.getImgageIcon("select.gif"));
zdsmLabel.setOpaque(false);
zdsmLabel.addMouseListener(this);
zdsmLabel.setVisible(false);

start = new JLabel(tkit.getImgageIcon("start.gif"));
start.addMouseListener(this);

stop = new JLabel(tkit.getImgageIcon("stop.gif"));
stop.addMouseListener(this);

chang2 = new JLabel(tkit.getImgageIcon("chang2.gif"));
chang2.addMouseListener(this);
chang2.setVisible(false);

showData=new JTextArea();

showData.setPreferredSize(new Dimension(280, 270));
showData.setOpaque(false);//透明
showData.setLineWrap(true);//激活自动换行功能
showData.setWrapStyleWord(true);//激活断行不断字功能

showData.setForeground(Color.black);
showData.setFont(font);
showData.setText("检测结果将在这里以文字形式显示;\n" +
"检测结果将在右边图表以图形形式显示。\n当前功能:网络检测!\n");

showDataPanel=new JPanel();
showDataPanel.setOpaque(false);
showDataPanel.setPreferredSize(new Dimension(300, 290));
showDataPanel.setBorder(BorderFactory.createEtchedBorder());//加框

showDataPanel.add(showData,"center");
/** 插入图表 */

chart = new Chart2D();
trace = new Trace2DLtd(300);
trace.setColor(Color.red);
chart.setFont(new Font("楷体",Font.BOLD,10));
chart.addTrace(trace);
chart.setOpaque(false);
chart.setName("检测分析结果");

chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(300, 290));
chartPanel.setBorder(BorderFactory.createEtchedBorder());
/** 图表就在chartPanel里面,还能控制大小什么的 **/

bdcsPanel = new JPanel(new FlowLayout(1, 60, 0));
bdcsPanel.setOpaque(false);
bdcsPanel.add(zdsmLabel);
bdcsPanel.add(start);
bdcsPanel.add(stop);
//bdcsPanel.add(chang1);
bdcsPanel.add(chang2);

listPanel = new JPanel();
listPanel.setOpaque(false);
listPanel.setPreferredSize(new Dimension(642, 90));//110
listPanel.add(bdcsPanel);

//参数设置
changPanel=new JPanel();
changPanel.setOpaque(false);
changPanel.setLayout(null);
changPanel.setPreferredSize(new Dimension(300, 290));
changPanel.setBorder(BorderFactory.createEtchedBorder());
changPanel.setVisible(false);//参数设置

add=new JLabel();
add.setText("+0.1");
add.setBorder(BorderFactory.createEtchedBorder());
add.setFont(new Font("楷体",Font.BOLD,14));
add.setForeground(Color.black);
add.setHorizontalAlignment(SwingConstants.CENTER);
add.addMouseListener(this);
add.setBounds(35,30, 100, 25);

sub=new JLabel();
sub.setText("-0.1");
sub.setBorder(BorderFactory.createEtchedBorder());
sub.setFont(new Font("楷体",Font.BOLD,14));
sub.setForeground(Color.black);
sub.setHorizontalAlignment(SwingConstants.CENTER);
sub.addMouseListener(this);
sub.setBounds(165,30, 100, 25);

add1=new JLabel();
add1.setText("+0.01");
add1.setBorder(BorderFactory.createEtchedBorder());
add1.setFont(new Font("楷体",Font.BOLD,14));
add1.setForeground(Color.black);
add1.setHorizontalAlignment(SwingConstants.CENTER);
add1.addMouseListener(this);
add1.setBounds(35,85, 100, 25);

sub1=new JLabel();
sub1.setText("-0.01");
sub1.setBorder(BorderFactory.createEtchedBorder());
sub1.setFont(new Font("楷体",Font.BOLD,14));
sub1.setForeground(Color.black);
sub1.setHorizontalAlignment(SwingConstants.CENTER);
sub1.addMouseListener(this);
sub1.setBounds(165,85, 100, 25);

add2=new JLabel();
add2.setText("+0.001");
add2.setBorder(BorderFactory.createEtchedBorder());
add2.setFont(new Font("楷体",Font.BOLD,14));
add2.setForeground(Color.black);
add2.setHorizontalAlignment(SwingConstants.CENTER);
add2.addMouseListener(this);
add2.setBounds(35,140, 100, 25);

sub2=new JLabel();
sub2.setText("-0.001");
sub2.setBorder(BorderFactory.createEtchedBorder());
sub2.setFont(new Font("楷体",Font.BOLD,14));
sub2.setForeground(Color.black);
sub2.setHorizontalAlignment(SwingConstants.CENTER);
sub2.addMouseListener(this);
sub2.setBounds(165,140, 100, 25);

changPanel.add(add);//
changPanel.add(sub);//
changPanel.add(add1);//
changPanel.add(sub1);//
changPanel.add(add2);//
changPanel.add(sub2);//

mainPanel.add(listPanel);
mainPanel.add(showDataPanel);
mainPanel.add(chartPanel);
mainPanel.add(changPanel);

bPanel.add(BorderLayout.NORTH, btmpPanel);
bPanel.add(BorderLayout.CENTER, mainPanel);

SkinPanel bigPanel = new SkinPanel("5.gif", 642,482);
bigPanel.setOpaque(false);
bigPanel.setLayout(new BorderLayout());
bigPanel.add(BorderLayout.NORTH, headPanel);
bigPanel.add(BorderLayout.CENTER, bPanel);

con.add(bigPanel);
judge = new Judge(trace,showData);
ud=new UserData();
}

@Override
public void mouseClicked(MouseEvent e) {
// System.out.println(e.getSource());

if (closeLabel == e.getSource()) {
System.out.println("退出!");
System.exit(0);

} else if (minLabel == e.getSource()) {
System.out.println("最小化!");
this.setState(JFrame.ICONIFIED);
} else if (0 != operType && mbdcsLabel == e.getSource()) {
System.out.println("样本分析!");
zdsmLabel.setVisible(true);//选择文件
start.setVisible(true);//开始检测
stop.setVisible(true);//停止检测
showData.setVisible(true);//文字输出
chartPanel.setVisible(true);//图标输出
changPanel.setVisible(false);//参数设置
//chang1.setVisible(false);
chang2.setVisible(false);
trace.removeAllPoints();
showData.setText("检测结果将在这里以文字形式显示;\n" +
"检测结果将在右边图表以图形形式显示。\n当前功能:本地检测!\n");
operType = 0;
} else if (1 != operType && mssfhLabel == e.getSource()) {
System.out.println("网络分析!");
zdsmLabel.setVisible(false);//选择文件
start.setVisible(true);//开始检测
stop.setVisible(true);//停止检测
showData.setVisible(true);//文字输出
chartPanel.setVisible(true);//图标输出
changPanel.setVisible(false);//参数设置
//chang1.setVisible(false);
chang2.setVisible(false);
trace.removeAllPoints();
showData.setText("检测结果将在这里以文字形式显示;\n" +
"检测结果将在右边图表以图形形式显示。\n当前功能:网络监测!\n");
operType = 1;
} else if (2 != operType && mcpsjLabel == e.getSource()) {
System.out.println("流量分析!");
zdsmLabel.setVisible(false);//选择文件
start.setVisible(true);//开始检测
stop.setVisible(true);//停止检测
showData.setVisible(true);//文字输出
chartPanel.setVisible(true);//图标输出
changPanel.setVisible(false);//参数设置
//chang1.setVisible(false);
chang2.setVisible(false);
trace.removeAllPoints();
showData.setText("检测结果将在这里以文字形式显示;\n" +
"检测结果将在右边图表以图形形式显示。\n当前功能:流量分析!\n");
operType = 2;
} else if (3 != operType && csszLabel == e.getSource()) {
System.out.println("参数设置!");
zdsmLabel.setVisible(false);//选择文件
start.setVisible(false);//开始检测
stop.setVisible(false);//停止检测
showData.setVisible(true);//文字输出
chartPanel.setVisible(false);//图标输出
changPanel.setVisible(true);//参数设置
//chang1.setVisible(true);
chang2.setVisible(true);
showData.setText("当前功能:参数设置!\n请先选择需要设置的参数然后" +
"\n点击右边按钮调整系统参数;\n" +
"调整节结果会在这里显示。\n");
changData=0;
operType = 3;
} else if (zdsmLabel == e.getSource()) {
System.out.println("选择文本!");
// tell.setText("当前功能:样本检测!");
int intRetVal = fc.showOpenDialog(this);
if (intRetVal == JFileChooser.APPROVE_OPTION) {
path=fc.getSelectedFile().getPath();
showData.setText("您选择的样本文件是:" + fc.getSelectedFile().getPath()+"\n");
}
zdsmLabel.setVisible(false);
bdcsPanel.setVisible(true);
} else if ((0 == operType)&&stop == e.getSource()) {
System.out.println("本地检测程序停止!");
showData.setText("本地检测程序已停止!");
judge.JudgeEnd();
} else if ((1 == operType)&&stop == e.getSource()) {
System.out.println("网络检测停止!");
showData.setText("网络检测程序已停止!");
judge.JudgeEnd();
} else if (0 == operType && start == e.getSource()) {
System.out.println("本地检测开始!");
showData.setText("本地检测程序已运行,请稍后!\n");
judge.MitlJudgeBegin(path);
} else if (1 == operType && start == e.getSource()) {
System.out.println("网络监测开始!");
showData.setText("网络监测程序已运行,程序会每1分钟输出一次分析结果,请稍后!\n");
judge.DosBegin();
} else if (2 == operType && start == e.getSource()) {
System.out.println("流量分析开始");
showData.setText("流量分析程序已运行,程序会每1秒钟输出一次分析结果,请稍后!\n");
judge.gfdBegin();
}else if (2 == operType&&stop == e.getSource()) {
System.out.println("流量分析停止!");
showData.setText("流量分析程序已停止!\n");
judge.gfdEnd();
}
else if(chang2 == e.getSource()){
System.out.println("设置异常阈值!");
showData.setText("当前异常阈值是:"+ud.msav+"\n");
changData=2;
}
else if(add == e.getSource()){//+100
addChang(+0.100000000000000);
}
else if(sub == e.getSource()){
subChang(-0.100000000000000000);
}
else if(add1 == e.getSource()){//+10
addChang(+0.01000000000000000000000000);
}
else if(sub1 == e.getSource()){
subChang(-0.01000000000000000000000);
}
else if(add2 == e.getSource()){//+1
addChang(+0.00100000000000000000000000000000);
}
else if(sub2 == e.getSource()){
subChang(-0.00100000000000000000000);
}

}
private void addChang(double x){
if(changData==0){
showData.setText("请先选择需要设置的参数,\n" +
"然后点击右边按钮调整系统参数;\n" +
"调整节结果会在这里显示。\n");
}
else if(changData==2){
ud.msav+=x;
showData.setText("异常阈值+"+x+";\n当前异常阈值是:"+ud.msav+".\n");
}
System.out.println("设置异常阈值!+"+x);
}
private void subChang(double x){
if(changData==0){
showData.setText("请先选择需要设置的参数;\n" +
"然后点击右边按钮调整系统参数;\n" +
"调整节结果会在这里显示。\n");
}
else if(changData==2){
if(ud.msav-x<0){
showData.setText("异常阈值不能小于0\n");
}
else{
ud.msav-=x;
showData.setText("异常阈值-"+x+";\n当前异常阈值是:"+ud.msav+".\n");
}
}
System.out.println("设置异常阈值!-"+x);
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}

}

/** 根据给定图片及大小,格式化一个面板并渲染 */
class SkinPanel extends JPanel {
private static final long serialVersionUID = -1142694233560441425L;

private static String RES_PATH = "/img/";

private Image skinImg;

private int width, height;

public SkinPanel(String resName, int width, int height) {
this.width = width;
this.height = height;
try {
System.out.println(resName);
skinImg = ImageIO.read(this.getClass().getResource(
RES_PATH + resName));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 复写渲染方法
*/
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (0 != width) {
g.drawImage(skinImg, 0, 0, width, height, null);
} else {
g.drawImage(skinImg, 0, 0, null);
}

}
}

class Toolkit {
private static String RES_PATH = "/img/";

/** 根据图像名称获得图像 */
public Image getImage(String resName) {
Image img = null;
try {
System.out.println(resName);
img = ImageIO.read(this.getClass().getResource(RES_PATH + resName));
} catch (IOException e) {

e.printStackTrace();
}
return img;
}

/** 根据图片名称,生成图标 */
public ImageIcon getImgageIcon(String resName) {
return new ImageIcon(getImage(resName));
}
}

class Dragger {
private Window fWindow;

private Component fComponent;

private int dx;

private int dy;

/**
* 让指定的Component通过鼠标拖动来移动Window
*/
public Dragger(Window window, Component component) {

fWindow = window;
fComponent = component;

fComponent.addMouseListener(createMouseListener());
fComponent.addMouseMotionListener(createMouseMotionListener());
}

private MouseListener createMouseListener() {
return new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
Point clickPoint = new Point(e.getPoint());
SwingUtilities.convertPointToScreen(clickPoint, fComponent);

dx = clickPoint.x - fWindow.getX();
dy = clickPoint.y - fWindow.getY();
fWindow.setCursor(new Cursor(Cursor.HAND_CURSOR));
}

public void mouseReleased(MouseEvent e) {
fWindow.setCursor(Cursor.getDefaultCursor());
}
};
}

private MouseMotionAdapter createMouseMotionListener() {
return new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
Point dragPoint = new Point(e.getPoint());
SwingUtilities.convertPointToScreen(dragPoint, fComponent);

fWindow.setLocation(dragPoint.x - dx, dragPoint.y - dy);
}
};
}
}</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息