close
參考答案
import java.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JDD02 extends JFrame implements ActionListener { //第一個JPanel用來放置所選取檔案 JPanel pn1 = new JPanel(); //顯示訊息的標籤 JLabel msg = new JLabel("請選取兩個 txt 檔來做合併"); //按鈕上的圖示 ImageIcon image1=new ImageIcon("JDD02-1.gif"); ImageIcon image2=new ImageIcon("JDD02-1.gif"); ImageIcon image3=new ImageIcon("JDD02-2.gif"); //選取檔案的按鈕 JButton bn1=new JButton("選取要合併的第一個檔案",image1); JButton bn2=new JButton("選取要合併的第二個檔案",image2); JButton bn3=new JButton("選取合併後要存入的檔案",image3); //顯示所選取檔案名稱 JTextField tfIn[]={new JTextField(),new JTextField()}; //顯示所要輸出的檔案名稱 JTextField tf3=new JTextField(3); //第二個JPanel用來放置按鈕 JPanel pn2 = new JPanel(); JButton bnOK = new JButton("確定"); JButton bnExit = new JButton("離開"); //合併檔案所用的 IO 類別 JFileChooser jfc = new JFileChooser("."); InputStream is; SequenceInputStream sis; File outputFile; FileOutputStream out; public JDD02( ) { addWindowListener(new WinListener()); } public static void main(String[] args) throws IOException { JDD02 test = new JDD02(); test.setTitle("文字檔合併器"); test.setup(); test.setSize(300,200); test.setVisible(true); } //設定畫面元件及 Listener void setup() { Container content = this.getContentPane(); pn1.setLayout(new GridLayout(0,1)); pn1.add(msg); bn1.addMouseListener(new MouseListen()); bn2.addMouseListener(new MouseListen()); bn3.addMouseListener(new MouseListen()); bn1.addActionListener(this); bn2.addActionListener(this); bn3.addActionListener(this); pn1.add(bn1); pn1.add(tfIn[0]); pn1.add(bn2); pn1.add(tfIn[1]); pn1.add(bn3); pn1.add(tf3); content.add(pn1); bnOK.addMouseListener(new MouseListen()); bnExit.addMouseListener(new MouseListen()); bnOK.addActionListener(this); bnExit.addActionListener(this); pn2.add(bnOK); pn2.add(bnExit); content.add(pn2,BorderLayout.SOUTH); } // 顯示開啟檔案對話方塊,並將所選取的檔案名稱放入 JTextField tfIn[] 中 void selectInFile(int i) { //回傳值為 0 代表使用者不是選擇 Cancel if(jfc.showOpenDialog(this)==0){ tfIn[i-1].setText(jfc.getSelectedFile().toString()); } } // 顯示開啟檔案對話方塊,並將所選取的檔案名稱放入 JTextField tf3 中 void selectOutFile() { //回傳值為 0 代表使用者不是選擇 Cancel if(jfc.showOpenDialog(this)==0){ tf3.setText(jfc.getSelectedFile().toString()); } } //進行檔案合併的動作 void combineFiles() { try { InputStream in0 = new FileInputStream(tfIn[0].getText().trim()); InputStream in1 = new FileInputStream(tfIn[1].getText().trim()); sis = new SequenceInputStream(in0,in1); outputFile = new File(tf3.getText().trim()); out=new FileOutputStream(outputFile); int c; while((c=sis.read())!=-1) { System.out.write(c); out.write(c); } sis.close(); out.close(); msg.setText("檔案合併完成"); tfIn[0].setText(""); tfIn[1].setText(""); tf3.setText(""); } catch (Exception ex) { msg.setText("檔案合併失敗"); } } //對按鈕的動作做出回應 public void actionPerformed(ActionEvent e) { if(e.getSource() == bnExit) { //結束程式 dispose(); System.exit(0); } else if(e.getSource() == bnOK) { //進行檔案合併 combineFiles(); } else if(e.getSource() == bn1) { // 顯示開啟檔案對話方塊,並將所選取的檔案名稱放入 JTextField tf[0] 中 selectInFile(1); } else if(e.getSource() == bn2) { selectInFile(2); } else if(e.getSource() == bn3) { selectOutFile(); } } //用來讓JFrame可以正常結束 class WinListener extends WindowAdapter { public void windowClosing(WindowEvent e) { e.getWindow().dispose(); System.exit(0); } } //讓按鈕在滑鼠進入會變色 class MouseListen extends MouseAdapter { public void mouseEntered(MouseEvent e) { ((JButton)(e.getSource())).setBackground(Color.YELLOW); } public void mouseExited(MouseEvent e) { ((JButton)e.getSource()).setBackground(new Color(204,204,204)); } } }
執行結果:
全站熱搜
留言列表