2

我想用从 JFrame 图标继承的图标创建我自己的文件,我在 java 中设置它,我自己的文件使用 FileOutputStream 和 ObjectOutputStream

try {
    ObjectOutputStream oos;
    //I create own file with own extension in drive D:
    FileOutputStream fos = new FileOutputStream("D:/myFile.ckl");
    oos = new ObjectOutputStream(fos);
    //Write Document in JTextPane to File
    oos.writeObject(jTextPane.getStyledDocument());
    oos.close();
    fos.close();
} catch (Exception exp) {
    JOptionPane.showMessageDialog(null, "" + exp.getStackTrace());
}

先感谢您

4

2 回答 2

4

@David 是正确的,主机平台拥有JFrame装饰,但您可以利用JInternalFrame图标,这些图标通常概括了平台的图标。例如,

private static final Icon ICON = (Icon) UIManager.get("InternalFrame.closeIcon");

此处列举了其他装饰性默认设置。

SSCCE

在此处输入图像描述

import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;

/** @see http://stackoverflow.com/a/10360374/230513 */
public class InternalFrameIcons extends JPanel {

    public InternalFrameIcons() {
        this.setLayout(new GridLayout(0, 1, 5, 5));
        this.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        this.add(createLabel("InternalFrame.closeIcon"));
        this.add(createLabel("InternalFrame.maximizeIcon"));
        this.add(createLabel("InternalFrame.minimizeIcon"));
    }

    private JLabel createLabel(String name) {
        Icon icon = (Icon) UIManager.get(name);
        JLabel label = new JLabel(name, icon, JLabel.CENTER);
        label.setHorizontalTextPosition(JLabel.CENTER);
        label.setVerticalTextPosition(JLabel.BOTTOM);
        return label;
    }

    private void display() {
        JFrame f = new JFrame("InternalFrameIcons");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new InternalFrameIcons().display();
            }
        });
    }
}
于 2012-04-28T03:40:26.440 回答
2

操作系统选择显示文件的图标。将数据写入文件并为其提供文件扩展名(在本例中为“ckl”)是您的工作,但文件最终位于的操作系统取决于给出的图标。

可以在某些文件中嵌入图标(许多可执行文件通常有自己的图标),但最终仍取决于操作系统。

于 2012-04-28T01:51:19.380 回答