0
打開兩個文件通過使用Jtabbedpane.Document偵聽器獨立工作每個文件。如果修改了僅針對特定文件啓用的一個文件文件偵聽器。這個怎麼做?。當打開兩個文件如何使用jtabbedpane工作documentlistener?
這裏是我的代碼,
import java.beans.PropertyVetoException;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringReader;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;
import javax.swing.text.Document;
public class Close extends javax.swing.JFrame {
JTextArea tx;
File file;
String filename=null;
int i=0;
boolean update =false;
public Close() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
tp = new javax.swing.JTabbedPane();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
Open = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jMenu1.setText("File");
Open.setText("Open");
Open.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
OpenActionPerformed(evt);
}
});
jMenu1.add(Open);
jMenuBar1.add(jMenu1);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tp, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tp, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 279, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
private void OpenActionPerformed(java.awt.event.ActionEvent evt) {
final JFileChooser jc = new JFileChooser();
int returnVal= jc.showOpenDialog(Close.this);
String title;
String s=null;
if(returnVal == JFileChooser.APPROVE_OPTION)
file = jc.getSelectedFile();
if (jc.getSelectedFile()!= null) {
BufferedReader br = null;
StringBuffer str = new StringBuffer("");
StringBuffer str1 = new StringBuffer("");
StringBuilder st = new StringBuilder("");
StringBuilder sbHex = new StringBuilder();
StringBuilder sbText = new StringBuilder();
StringBuilder sbResult = new StringBuilder();
final StringBuilder pb = new StringBuilder();
int bytesCounter =0;
String helloWorldInHex=null;
int value=0;
try {
br = new BufferedReader(new FileReader(file));
String line;
try {
while ((line = br.readLine()) != null) {
str.append(line + "\n");
}
}
catch (IOException ex) {
Logger.getLogger(Open.class.getName()).log(Level.SEVERE, null, ex);
}
}
catch (FileNotFoundException ex) {
Logger.getLogger(Open.class.getName()).log(Level.SEVERE, null, ex);
}
String t = str.toString();
filename=file.getPath();
final JInternalFrame internalFrame = new JInternalFrame("",true,true);
final String filePath=file.getAbsolutePath();
i++;
internalFrame.setName("Doc "+i);
tx=new JTextArea();
internalFrame.setTitle(filename);
try {
internalFrame.setSelected(true);
}
catch (PropertyVetoException ex) {
Logger.getLogger(Open.class.getName()).log(Level.SEVERE, null, ex);
}
tp.add(internalFrame);
try{
tp.setSelectedIndex(i-1);
}
catch(IndexOutOfBoundsException ioe){
}
tx.setText(t);
internalFrame.add(tx);
internalFrame.setVisible(true);
Document doc=tx.getDocument();
doc.addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
update =true;
}
@Override
public void removeUpdate(DocumentEvent e) {
update =true;
}
@Override
public void changedUpdate(DocumentEvent e) {
update =true;
}
});
internalFrame.addInternalFrameListener(new InternalFrameAdapter() {
@Override
public void internalFrameClosing(InternalFrameEvent e) {
String name=tx.getName();
if(update==true){
update=false;
int reply = JOptionPane.showConfirmDialog(null,
"Save Changes to this Document", "Quit", JOptionPane.YES_NO_CANCEL_OPTION);
int chooserStatus;
if (reply == JOptionPane.YES_OPTION){
boolean success;
String editorString;
FileWriter fwriter;
PrintWriter outputFile;
try {
DataOutputStream d = new DataOutputStream(new FileOutputStream(filename));
String line = tx.getText();
BufferedReader br = new BufferedReader(new StringReader(line));
while((line = br.readLine())!=null) {
d.writeBytes(line + "\r\n");
}
}
catch (IOException ee) {
success = false;
}
success = true;
i--;
tp.remove(internalFrame);
}
else if(reply==JOptionPane.NO_OPTION)
{
i--;
tp.remove(internalFrame);
}
}
else
{
i--;
tp.remove(internalFrame);
}
}
});
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
Logger.getLogger(Open.class.getName()).log(Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
Logger.getLogger(Open.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(Open.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedLookAndFeelException ex) {
Logger.getLogger(Open.class.getName()).log(Level.SEVERE, null, ex);
}
new Open().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JMenuItem Open;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JTabbedPane tp;
// End of variables declaration
}
謝謝。
哇,這就像這個問題第10次被問到。每個標籤的內容應該是一個獨立的工作單元,不需要知道任何其他標籤或其內容。爲此,您應該創建一個單獨的「編輯器」類,它包含對文件,視圖(文本編輯器)和「DocumentListener」的引用,它應該提供允許外部類查詢關於狀態的功能的內容(更改或不),甚至可以提供'ChangeListener'支持... – MadProgrammer 2014-10-30 06:14:04
我是新來的鞦韆。你可以提供任何相關的例子或鏈接:@ MadProgrammer – user3531731 2014-10-30 06:17:36
[使用JFC/Swing創建GUI](http://docs.oracle.com/javase/tutorial/uiswing/) – MadProgrammer 2014-10-30 06:18:14