?? hideinfopanel.java
字號:
package hideInfo;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.*;
//窗口中的主Panel ,處理所有消息、安放所有按鈕等控件
public class HideInfoPanel extends JPanel implements ActionListener
{
private boolean isHideMode; //兩種模式:隱藏模式和提取模式, true代表隱藏模式
private MediaTracker mt; //用于監(jiān)控多媒體對象的類
private JFileChooser jfc; //文件選擇器
private Image im; //圖像對象
private JButton bFile1; //按鈕:選擇源圖像 左上第一個按鈕
private JButton bFile2; //按鈕:選擇源文本文件 左上第二
private JButton bFile3; //按鈕:選擇目的圖像: 左上第三
private JButton bMode; //模式切換按鈕:左下按鈕
private JButton bOp; //啟動操作(在隱藏模式下啟動隱藏操作,提取模式下提取操作)
private File originBMP; //源圖像文件對象
private File targetBMP; //目的圖像文件對象
private File originTxt; //源文本文件對象
private File targetTxt; //目的文本文件對象
private BMP originImage; //第三方類:我借用進(jìn)來的 用于直接把BMP文件轉(zhuǎn)換為Image對象,因為JAVA不直接支持載入BMP文件。隱藏和提取時不用它,因為直接把BMP文件當(dāng)作文件來處理,不需要轉(zhuǎn)換為Image對象
JLabel tag1,tag2,tag3; //三個顯示“路徑”字樣的標(biāo)簽
JLabel status; //最下方提示欄
JTextField pathFile1,pathFile2,pathFile3; //顯示上面三個文件的路徑 在Panel的右上方
//JLabel tag5,tag4;
ShowPanel show1,show2; //顯示兩個BMP圖像 (Panel的右下)
public HideInfoPanel()
{
//初始化
this.isHideMode=true; //默認(rèn)隱藏模式
this.setLayout(null); //使用坐標(biāo)方式指定各個按鈕的位置
this.mt=new MediaTracker(this);
jfc=new JFileChooser(); //文件選擇器
this.im=Toolkit.getDefaultToolkit().getImage("resource/background.jpg");//載入背景
mt.addImage(this.im,1);
try
{
mt.waitForID(1);//跟蹤多媒體文件
}
catch (InterruptedException e)
{
}
this.setVisible(true);
this.bFile1=new JButton("選擇原圖像文件"); //顯示的字樣 (按鈕)
this.bFile1.setBounds(70,75,120,35); //位置和大小
this.bFile1.setFont(new Font("宋體",Font.PLAIN,12));//字體
this.bFile1.setOpaque(false); //透明
this.bFile1.setForeground(new Color(117,60,27)); //字體顏色
//this.bFile1.setBorder(null);
this.bFile1.addActionListener(this); //如果這個按鈕被按動,事件將被發(fā)送到本累下面的處理函數(shù)中
this.add(bFile1);
this.bFile2=new JButton("選擇待隱藏文本");//同上
this.bFile2.setBounds(70,120,120,35);
this.bFile2.setFont(new Font("宋體",Font.PLAIN,12));
this.bFile2.setOpaque(false);
this.bFile2.setForeground(new Color(117,60,27));
//this.bFile2.setBorder(null);
this.bFile2.addActionListener(this);
this.add(bFile2);
this.bFile3=new JButton("選擇目標(biāo)圖像");
this.bFile3.setBounds(70,165,120,35);
this.bFile3.setFont(new Font("宋體",Font.PLAIN,12));
this.bFile3.setOpaque(false);
this.bFile3.setForeground(new Color(117,60,27));
//this.bFile3.setBorder(null);
this.bFile3.addActionListener(this);
this.add(bFile3);
this.bOp=new JButton("開始隱藏操作");
this.bOp.setBounds(70,220,120,100);
this.bOp.setFont(new Font("宋體",Font.BOLD,12));
this.bOp.setOpaque(false);
this.bOp.setForeground(new Color(117,60,27));
this.bOp.addActionListener(this);
this.add(bOp);
this.bMode=new JButton("切換模式");
this.bMode.setBounds(70,340,120,80);
this.bMode.setFont(new Font("宋體",Font.BOLD,12));
this.bMode.setOpaque(false);
this.bMode.setForeground(new Color(117,60,27));
//this.bMode.setBorder(null);
this.bMode.addActionListener(this);
this.add(bMode);
this.tag1=new JLabel("路徑:");
this.tag1.setBounds(200,75,40,35);
this.tag1.setFont(new Font("宋體",Font.PLAIN,14));
// this.tag1.setHorizontalAlignment(SwingConstants.RIGHT);
this.tag1.setForeground(new Color(117,60,27));
this.add(this.tag1);
this.tag2=new JLabel("路徑:");
this.tag2.setBounds(200,120,40,35);
this.tag2.setFont(new Font("宋體",Font.PLAIN,14));
// this.tag2.setHorizontalAlignment(SwingConstants.RIGHT);
this.tag2.setForeground(new Color(117,60,27));
this.add(this.tag2);
this.tag3=new JLabel("路徑:");
this.tag3.setBounds(200,165,40,35);
this.tag3.setFont(new Font("宋體",Font.PLAIN,14));
// this.tag3.setHorizontalAlignment(SwingConstants.RIGHT);
this.tag3.setForeground(new Color(117,60,27));
this.add(this.tag3);
// this.tag4=new JLabel("隱藏操作前:");
// this.tag4.setBounds(270,210,200,25);
// this.tag4.setHorizontalAlignment(SwingConstants.LEFT);
// this.tag4.setFont(new Font("宋體",Font.PLAIN,12));
// this.tag4.setForeground(new Color(117,60,27));
// this.add(this.tag4);
//
// this.tag5=new JLabel("隱藏操作后:");
// this.tag5.setBounds(500,210,200,25);
// this.tag5.setFont(new Font("宋體",Font.PLAIN,12));
// this.tag5.setForeground(new Color(117,60,27));
// this.tag5.setHorizontalAlignment(SwingConstants.LEFT);
// this.add(this.tag5);
this.status=new JLabel("當(dāng)前模式:信息隱藏模式");
this.status.setBounds(70,450,680,30);
this.status.setHorizontalAlignment(SwingConstants.LEFT); //左對齊
this.status.setFont(new Font("宋體",Font.ITALIC,16));
this.status.setForeground(Color.YELLOW);
this.status.setOpaque(false);
this.add(this.status);
this.pathFile1=new JTextField(100);
this.pathFile1.setBounds(240,75,490,35);
this.pathFile1.setFont(new Font("宋體",Font.PLAIN,12));
this.pathFile1.setEditable(false);
this.pathFile1.setOpaque(false);
this.pathFile1.setBorder(null);
this.add(this.pathFile1);
this.pathFile2=new JTextField(100);
this.pathFile2.setBounds(240,120,490,35);
this.pathFile2.setFont(new Font("宋體",Font.PLAIN,12));
this.pathFile2.setEditable(false);
this.pathFile2.setOpaque(false);
this.pathFile2.setBorder(null);
this.add(this.pathFile2);
this.pathFile3=new JTextField(100);
this.pathFile3.setBounds(240,165,490,35);
this.pathFile3.setFont(new Font("宋體",Font.PLAIN,12));
this.pathFile3.setEditable(false);
this.pathFile3.setOpaque(false);
this.pathFile3.setBorder(null);
this.add(this.pathFile3);
this.show1=new ShowPanel();
this.show1.setBorder(new TitledBorder(new LineBorder(new Color(69,167,116)),"隱藏前的圖像",TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION,new Font("宋體",Font.PLAIN,12),new Color(117,60,27)));
this.show1.setBounds(220,200,230,230);
// this.show1.setBackground(Color.WHITE);
this.show1.setOpaque(false);
this.add(this.show1);
// show1.setImage(Toolkit.getDefaultToolkit().getImage("resource/dd.JPG"));
show1.repaint();
this.show2=new ShowPanel();
this.show2.setBorder(new TitledBorder(new LineBorder(new Color(69,167,116)),"隱藏后的圖像",TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION,new Font("宋體",Font.PLAIN,12),new Color(117,60,27))); //帶有標(biāo)題的邊框
this.show2.setBounds(480,200,230,230);
// this.show2.setBackground(Color.WHITE);
this.show2.setOpaque(false);
this.add(this.show2);
// show2.setImage(Toolkit.getDefaultToolkit().getImage("resource/dd.JPG"));
show2.repaint();
this.repaint();
}
public void actionPerformed(ActionEvent e) {//這個函數(shù)負(fù)責(zé)處理所有按鈕被按動所產(chǎn)生的事件
if(((JButton)e.getSource()).equals(this.bFile1)) //按動的按鈕是選擇源圖像文件按鈕
{
int retVal=jfc.showOpenDialog(this); //打開文件選擇器
if (retVal==JFileChooser.APPROVE_OPTION)
{
this.originBMP=jfc.getSelectedFile();//選定文件
// System.out.println("File name is : " +this.originBMP.getAbsolutePath());
this.pathFile1.setText(this.originBMP.getAbsolutePath());//顯示它的路徑
if(this.originBMP.getName().endsWith(".BMP")||this.originBMP.getName().endsWith(".bmp"))
{//如果是.bmp文件 則顯示它
this.originImage=new BMP(this.originBMP);
this.show1.setImage(this.originImage.getImage());
this.show1.repaint();
this.status.setText("源圖像文件大小:"+this.originBMP.length()+" Byte");
}
else
{
//否則在狀態(tài)欄顯示錯誤信息
this.status.setText("提示:源圖像文件不是BMP格式,請重新指定");
this.show1.setImage(null);
this.originBMP=null;
this.show1.repaint();
}
this.repaint();
}
else this.originBMP=null;
}
if(((JButton)e.getSource()).equals(this.bFile2)) //按下的是第二個按鈕 選擇文本
{
int retVal=jfc.showOpenDialog(this);
if(this.isHideMode)//判斷是不是隱藏模式 兩個模式下文本文件的作用不痛
{
if (retVal==JFileChooser.APPROVE_OPTION)
{
this.originTxt=jfc.getSelectedFile();
this.pathFile2.setText(this.originTxt.getAbsolutePath());
this.status.setText("待隱藏文件大小:"+this.originTxt.length()+" Byte");
}
else this.originTxt=null;
}
else
{
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -