我想拖放一個文件,該文件必須在新的/單獨的tab中打開。我爲DragAndDrop.But編寫了代碼。我從計算機上拖放文本文件。它複製或覆蓋文件的內容。但是,當我拖放一個文件時,它應該在一個單獨的選項卡中打開。如何才能做到這一點。請給我建議。謝謝。我已發佈我的原始應用程序。它有兩個類。如何使用swing在新選項卡中拖放文本文件
主要類:
public class OpenDemo extends javax.swing.JFrame implements ChangeListener{
private ArrayList<OInternalFrame> frames = new ArrayList<OInternalFrame>();
private OInternalFrame currentFrame;
int i=0;
JTabbedPane tabbedPane2;
public OpenDemo() {
initComponents();
}
@SuppressWarnings("unchecked")
private void initComponents() {
tabbedPane2=new JTabbedPane();
this.add(tabbedPane2);
enableDragAndDrop();
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.DEFAULT_SIZE, 279, Short.MAX_VALUE));
pack();
}
private void openActionPerformed(java.awt.event.ActionEvent evt) {
FileDialog fd = new FileDialog(OpenDemo.this, "Select File", FileDialog.LOAD);
fd.setVisible(true);
String sts;
if (fd.getFile() != null) {
sts = fd.getDirectory() + fd.getFile();
System.out.println(sts);
BufferedReader br = null;
StringBuffer str = new StringBuffer("");
try {
br = new BufferedReader(new FileReader(sts));
String line;
try {
while ((line = br.readLine()) != null) {
str.append(line + "\n");
}
} catch (IOException ex) {
Logger.getLogger(OpenDemo.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (FileNotFoundException ex) {
Logger.getLogger(OpenDemo.class.getName()).log(Level.SEVERE, null, ex);
}
String t = str.toString();
OInternalFrame internalFrame = new OInternalFrame("",true,true);
i++;
internalFrame.setName("Doc "+i);
try {
internalFrame.setSelected(true);
} catch (PropertyVetoException ex) {
Logger.getLogger(OpenDemo.class.getName()).log(Level.SEVERE, null, ex);
}
internalFrame.addInternalFrameListener(new InternalFrameAdapter() {
@Override
public void internalFrameClosing(InternalFrameEvent e) {
i--;
frames.remove(currentFrame);
tp.remove(currentFrame);
}
});
tp.add(internalFrame);
tp.setSelectedIndex(i-1);
tp.addChangeListener(this);
frames.add(internalFrame);
currentFrame=internalFrame;
currentFrame.setText(t);
currentFrame.setVisible(true);
}
}
@Override
public void stateChanged(ChangeEvent ce) {
JTabbedPane sourceTabbedPane = (JTabbedPane) ce.getSource();
int index = sourceTabbedPane.getSelectedIndex();
try {
currentFrame =frames.get(index);
}
catch(IndexOutOfBoundsException e1){
}
}
public static void main(String args[]) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(OpenDemo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(OpenDemo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(OpenDemo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(OpenDemo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new OpenDemo().setVisible(true);
}
});
}
private javax.swing.JMenu jMenu1;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem open;
private javax.swing.JTabbedPane tp;
private void enableDragAndDrop() {
OInternalFrame iFrame=new OInternalFrame("",true,true);
DropTarget target=new DropTarget(currentFrame.textArea,new DropTargetListener(){
public void dragEnter(DropTargetDragEvent e) {
}
public void dragExit(DropTargetEvent e) {
}
public void dragOver(DropTargetDragEvent e) {
}
public void dropActionChanged(DropTargetDragEvent e) {
}
public void drop(DropTargetDropEvent e) {
try {
e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
java.util.List list=(java.util.List)e.getTransferable().getTransferData(DataFlavor.javaFileListFlavor);
File file=(File)list.get(0);
//JTextArea newTabTextArea=new JTextArea();
//DropTarget target=new DropTarget(newTabTextArea,this);
DropTarget target=new DropTarget(currentFrame.textArea,this);
//newTabTextArea.read(new FileReader(file),null);
currentFrame.textArea.read(new FileReader(file),null);
//newTabTextArea.setCaretPosition(0);
currentFrame.textArea.setCaretPosition(0);
//tabbedPane2.add(add(newTabTextArea));
tp.add(currentFrame.textArea);
int tabIndex=tp.indexOfComponent(currentFrame.textArea);
tp.setSelectedIndex(tabIndex);
tp.setTitleAt(tabIndex,file.getName());
add(tp);
}
catch(Exception ex){}
}
});
}
}
OInternalFrame:
public class OInternalFrame extends JInternalFrame
{
public JTextArea textArea;
private JScrollPane scrollPane;
JTabbedPane tabbedPane2;
public OInternalFrame(String title,boolean resizable,boolean closable)
{
super(title,resizable,closable);
initComponents();
}
private void initComponents() {
textArea = new JTextArea();
tabbedPane2=new JTabbedPane();
scrollPane = new JScrollPane();
textArea.setFont(new java.awt.Font("Miriam Fixed", 0, 13));
add(scrollPane);
scrollPane.getViewport().add(textArea);
setVisible(true);
scrollPane.setVisible(true);
}
public void setText(String t) {
textArea.setText(t);
textArea.setCaretPosition(0);
textArea.setVisible(true);
textArea.repaint();
}
}
任何人給我答覆。 – user3912886 2014-09-25 12:16:31
考慮發佈格式良好的代碼,許多人會考慮努力閱讀它。請記住,我們是志願者,如果你讓人們更難理解你的代碼和問題,很多人會轉向下一個問題。 – 2014-09-26 01:11:38
我編輯我的代碼,很容易理解,請檢查一次。謝謝您的回覆。 – user3912886 2014-09-26 05:13:30