gpt4 book ai didi

java - 使用java swing我在jtextarea中打开了一个文本文件,关闭它后JoptionPane对话框总是出现

转载 作者:行者123 更新时间:2023-12-02 05:20:42 27 4
gpt4 key购买 nike

我将一个文本文件加载到 jtextarea 中,然后修改了其内容,但是当我关闭它时,jinternalframe 会关闭,但即使我不修改文本,也始终显示对话框。这是我的问题,因为我希望仅在修改文本时才出现该对话框。

如何测试这种情况?

这是我的代码:

public class Open extends javax.swing.JFrame {
JTextArea tx;
ArrayList<String> fileList;
File file;
String filename=null;
int i=0;
public Open() {
fileList=new ArrayList<String>();
initComponents();
}

// <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(Open.this);
String title;
String s=null;
if(returnVal == JFileChooser.APPROVE_OPTION)
file = jc.getSelectedFile();
if (jc.getSelectedFile()!= null ) {
filename=file.getPath();
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(Exception e)

{

}
String t = str.toString();
final JInternalFrame internalFrame = new JInternalFrame("",true,true);
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);
}
tx.setText(t);
internalFrame.add(tx);
tp.add(internalFrame);
try{
tp.setSelectedIndex(i-1);
}
catch(IndexOutOfBoundsException ioe){
}
internalFrame.setTitle(filename);
tp.add(internalFrame);
try {
tp.setSelectedIndex(i-1);
}
catch(IndexOutOfBoundsException ioe){
}
internalFrame.setVisible(true);
internalFrame.addInternalFrameListener(new InternalFrameAdapter() {
@Override
public void internalFrameClosing(InternalFrameEvent e) {
String name=tx.getName();

if(tx.getText().length()>0){
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);

}
}

}
});

}

}
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
}

有什么建议吗?

最佳答案

您应该使用文档监听器而不是 if...else。使用 boolean 变量检查文件是否被修改,如果该文件被修改,则打开对话框,否则关闭框架。

更新为了澄清代码,我更新了代码,请检查更新后的代码

boolean updated = false;       //instance variable

public Class_name() //would be your constructor or you can put code in initializing method
{

TextArea tx = new TextArea();
Document doc = tx.getDocument();
doc.addDocumentListener(this);

internalFrame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
if(updated)
{
//show dialog box and save changes
internalFrame.dispose();
}
else
internalFrame.dispose();
}
});
}
after that add use this code in overridden methods
public void insertUpdate(DocumentEvent e)
{
updated = true;
}
public void removeUpdate(DocumentEvent e)
{
updated = true;
}
public void changeUpdate(DocumentEvent e)
{
updated = true;
}

关于java - 使用java swing我在jtextarea中打开了一个文本文件,关闭它后JoptionPane对话框总是出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26545906/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com