1

ドラッグ アンド ドロップ イベントが発生したときにフレームのタイトルを変更する方法がわかりません。DnD と Transferable について Java Docs を読みましたが、解決策が見つかりません。DropTargetListener でゲームをプレイする必要があるという結論に達しましたが、デッドロックに陥っています。ドラッグ アンド ドロップでもテキストの属性を保持したい)

SSCCE は次のとおりです。

package sscceeditor;
import java.io.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.text.BadLocationException;
import rtf.AdvancedRTFDocument;
import rtf.AdvancedRTFEditorKit;

class ExampleFrame extends JFrame{
    private JMenuBar bar = new JMenuBar();
    private JMenu fileMenu = new JMenu("File");
    private JMenuItem saveItem = new JMenuItem("Save");
    private JMenuItem loadItem = new JMenuItem("Load");
    private JTextPane txtPane = new JTextPane(new AdvancedRTFDocument());
    private JScrollPane scroller = new JScrollPane(txtPane);
    private JFileChooser chooser = new JFileChooser();
    private AdvancedRTFEditorKit rtfKit = new AdvancedRTFEditorKit();


    //ctor begins...
    public ExampleFrame(){
        super("Example Editor");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(500, 400);
        this.setLocationRelativeTo(null);

        saveItem.addActionListener(new SaveHandler());
        loadItem.addActionListener(new LoadHandler());
        this.addDragAndDropSupportToJTextPane(txtPane);

        //set the kit...
        txtPane.setEditorKit(rtfKit);


        //create the menu...
        fileMenu.add(saveItem);
        fileMenu.add(loadItem);
        bar.add(fileMenu);
        this.setJMenuBar(bar);

        //create the main panel...
        JPanel mainPane = new JPanel();
        mainPane.setLayout(new BorderLayout());
        mainPane.add(BorderLayout.CENTER , scroller);

        this.setContentPane(mainPane);

    }//end of ctor.

    //inner event handler classes...
    class SaveHandler implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            int response = chooser.showSaveDialog(ExampleFrame.this);

            if(response == JFileChooser.APPROVE_OPTION){

                try(BufferedWriter bw = new BufferedWriter(
                        new FileWriter(chooser.getSelectedFile().getPath())))
                {

                    rtfKit.write(bw, txtPane.getDocument(), 0, txtPane.getDocument().getLength());

                    bw.close();

                    JOptionPane.showMessageDialog( ExampleFrame.this,"Saved");

                    txtPane.setText("");
                }catch(IOException | BadLocationException  ex){
                    System.err.println(ex);
                }


            }
        }//end of method.

    }

    class LoadHandler implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            int response = chooser.showOpenDialog(ExampleFrame.this);

            if(response == JFileChooser.APPROVE_OPTION){

                StringBuilder sb = new StringBuilder();

                try(BufferedReader bw = new BufferedReader(
                        new FileReader(chooser.getSelectedFile().getPath())))
                {

                    txtPane.setText("");
                    rtfKit.read(bw, txtPane.getDocument(), 0);
                    bw.close();
                }catch(IOException | BadLocationException ex){
                    System.err.println(ex);
                }


            }
        }//end of method.

    }


    private void addDragAndDropSupportToJTextPane(JTextPane thePane){

        thePane.setDragEnabled(true);


        thePane.setDropMode(DropMode.INSERT);

    }//end of method.


}//end of class ExampleFrame.


public class SSCCEeditor {

    public static void main(String... args) {
        SwingUtilities.invokeLater(new Runnable(){

            @Override
            public void run() {
                new ExampleFrame().setVisible(true);
            }

        });
    }
}

お時間をありがとうございました!

4

0 に答える 0