【问题标题】:Paint applet - problems loading/saving images [closed]绘画小程序 - 加载/保存图像的问题[关闭]
【发布时间】:2011-09-15 18:00:08
【问题描述】:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseEvent;
import java.lang.Math.*;
import java.text.*;
import java.io.*;
import java.awt.Scrollbar.*;
import javax.swing.*;
import java.awt.datatransfer.*;

public class DFunPaint extends JApplet implements ActionListener, AdjustmentListener, MouseListener, MouseMotionListener
{
    String filename;
    JTextArea tx = new JTextArea();
    JMenuBar mb =new JMenuBar();
    JMenu f = new JMenu("File");
    JMenuItem n = new JMenuItem("New");
    JMenuItem o = new JMenuItem("Open");
    JMenuItem s = new JMenuItem("Save");
    JMenuItem e = new JMenuItem("Exit");
    JMenu ed = new JMenu("Edit");
    JMenuItem cut = new JMenuItem("Cut");
    JMenuItem copy = new JMenuItem("Copy");
    JMenuItem paste = new JMenuItem("Paste");
    JMenu format = new JMenu("Format");
    JMenuItem  Word = new JMenuItem("Word Wrap");
    JMenuItem  Font = new JMenuItem("Font");
    JMenu view = new JMenu("View");
    JMenuItem  StatusBar= new JMenuItem("StatusBar");
    JMenu help = new JMenu("Help");
    JMenuItem  About = new JMenuItem("About");
    JMenuItem Topics = new JMenuItem("Topics");

    private JPanel p1 = new JPanel(new BorderLayout());

    public void init(){
        setLayout(new BorderLayout());
        f.add(n);
        f.add(o);
        f.add(s);
        f.add(e);
        mb.add(f);
        ed.add(cut);
        ed.add(copy);
        ed.add(paste);
        mb.add(ed);
        format.add(Word);
        format.add(Font);
        mb.add(format);
        mb.add(view);
        view.add(StatusBar);
        mb.add(help);
        help.add(About);
        JMenuItem Topics = new JMenuItem("Topics");
        help.add(Topics);

        p1.add(mb);

        add(p1,"North");

        n.addActionListener(this);
        o.addActionListener(this);
        s.addActionListener(this);
        e.addActionListener(this);
        cut.addActionListener(this);
        copy.addActionListener(this);
        paste.addActionListener(this);
        About.addActionListener(this);
        Topics.addActionListener(this);
    }

    public void ActionPerformed(ActionEvent e)
    {
        if (e.getSource() == n)
            tx.setText(" ");
    }

    public void actionPerformed(ActionEvent e)
    {
        if (e.getSource() == o)
            JFileDialog fd = new JFileDialog( DFunPaint, "select File",JFileDialog.LOAD);
        fd.show();
        if (fd.getFile()!=null)
        {
            filename = fd.getDirectory() + fd.getFile();
            setTitle(filename);
            ReadFile();
        }
        tx.requestFocus();
    }

    public void actionPerformed(ActionEvent e)
    {
        if (e.getSource() == s)
            FileDialog fd = new FileDialog(DFunPaint,"Save File",FileDialog.SAVE);
        fd.show();
        if (fd.getFile()!=null)
        {
            filename = fd.getDirectory() + fd.getFile();
            setTitle(filename);
            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");
                    d.close();
                }
            }
            catch(Exception ex)
            {
                System.out.println("File not found");
            }
            tx.requestFocus();
        }
    }

    public void ctionPerformed(ActionEvent ae)
    {
        if (ae.getSource() == e)
            System.exit(0);
    }

    public void ActionPerformed(ActionEvent e)
    {
        if (e.getSource() == cut)
            String sel =
        StringSelection ss = new StringSelection(tx.getSelectedText());
        clip.setContents(ss,ss);
        tx.replaceRange(" ",tx.getSelectionStart(),tx.getSelectionEnd());
    }

    public void actionPerformed(ActionEvent e)
    {
        if (e.getSource() == copy)
            String sel = tx.getSelectedText();
            StringSelection clipString = new StringSelection(sel);
            clip.setContents(clipString, clipString);
        }

    public void ActionPerformed(ActionEvent e)
    {
        if (e.getSource() == paste)
            Transferable cliptran = clip.getContents();

        try
        {
            String sel = (String) cliptran.getTransferData(DataFlavor.stringFlavor);
            tx.replaceRange(sel,tx.getSelectionStart(),tx.getSelectionEnd());
        }
        catch(Exception exc)
        {
            System.out.println("not string flavour");
        }
    }

【问题讨论】:

  • @mrdg:“巨大的代码,未格式化..”我尝试对其进行格式化,并收到消息body is limited to 30000 characters; you entered 31819,这可能解释了它未格式化的原因。 ;)

标签: java image applet openfiledialog savefiledialog


【解决方案1】:

Applet 默认部署在安全沙箱中。要访问本地文件系统,基本上有 2 个选项:

  1. 对代码进行数字签名,并在提示时让用户确定信任对话框。如果一个小程序是“可信的”,它就可以完成应用程序可以做的大部分事情。当然可以使用JFileChooser 加载和保存文件。这是一个使用自签名证书的example of a trusted applet。演示小程序可以浏览本地文件系统并打开JEditorPane中的文件。
  2. 最近的 Sun/Oracle JRE 是 Plug-In2“下一代”架构。它们允许嵌入式小程序访问JNLP API(为Java Web Start 提供)的服务。使用 JNLP API 文件服务,沙盒小程序可以从本地文件系统加载资源并将资源保存到本地文件系统(在提示时再次获得用户批准)。这是我的demo. of the JNLP API file services

请注意,我对问题的性质做了一些疯狂的猜测。为了获得更好的建议,请准确说明问题所在。

请,以后不要那么多代码。 ;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    相关资源
    最近更新 更多