文本描述的显示选项 - Java Swing

Display Options for Text Descriptions - Java Swing

好的,我正在编写这个程序,希望能有一些疏忽。


这个程序,使用 JListJListSelectionListener 将一些图像输出到 1/2 垂直分割 JPanes。其中 JPanes,如前所述;一个显示图像,在底部 JPanel,一个 JEditorPane 读取文本。对于 JEditorPane,我有一个 HTML doc. 样式并且正在从中读取。这在理论上,是我对每个图像的描述。除了,我也不能重定向 JEditorPane,从前面提到的 HTML 文件中读取,这些文件的 URLspaths 是通过 访问的字符串数组[].

主要 Points/Questions (tldr;)


  1. 如何在每次从 JList[=45= 中选择新图像时从不同的 HTML 文件中读取此 JEditorPane ]?
  2. 我应该使用 JTextPane 还是其他东西?只是,据我所知,造型可能是个问题。那么,我做错了什么或做错了什么,应该是什么?

代码


private String[] fileName = { "htmlDoc1", "htmlDoc2", "htmlDoc3", "htmlDoc4" };

protected JScrollPane createEditorList() {
    JEditorPane editorPane = createEditorPane(fileName[list.getSelectedIndex()]);
    JScrollPane editorScrollPane = new JScrollPane(editorPane);
    editorScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    editorScrollPane.setPreferredSize(new Dimension(250, 145));
    editorScrollPane.setMinimumSize(new Dimension(10, 10));
    return editorScrollPane;
}

private JEditorPane createEditorPane(String file) {
    JEditorPane editorPane = new JEditorPane();
    editorPane.setEditable(false);
    java.net.URL helpURL = Bobbleheads.class.getResource("/images/bobbleheads/" + file + ".html");
    if (helpURL != null) {
        try {
            editorPane.setPage(helpURL);
        } catch (IOException e) {
            System.err.println("Attempted to read a bad URL: " + helpURL);
        }
    } else {
        System.err.println("Couldn't find file: " + fileName);
    }

    return editorPane;
}

public void valueChanged(ListSelectionEvent e) {
    JList<?> list = (JList<?>) e.getSource();
    updateLabel(imageNames[list.getSelectedIndex()]);
    createEditorPane(fileName[list.getSelectedIndex()]);
}

也谢谢大家,尽一切可能做出贡献!

通过一些方法处理解决了这个 Java 单例。当然,在 AJNeufeld、Andrew Thompson 和 Stack Overflow 的出色帮助下!

方法如下:


原始方法 更改:

protected JScrollPane createEditorList() {
private JEditorPane createEditorPane(String file) {

public void valueChanged(ListSelectionEvent e) { 方法 被替换并复制到这些较新的 代码块 .

代码:


重新编写的新方法

protected JScrollPane makeAEditorPane() {
    JScrollPane editorScrollPane = new JScrollPane(makeAEditorList());
    editorScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
    editorScrollPane.setPreferredSize(new Dimension(250, 145));
    editorScrollPane.setMinimumSize(new Dimension(10, 10));

    return editorScrollPane;
}

protected JEditorPane makeAEditorList() {
    editorPane = new JEditorPane();
    editorPane.setEditable(false);

    return editorPane;
}

private void feedEditor(String name) {
    URL helpURL = Bobbleheads.class.getResource("/images/bobbleheads/" + name + ".html");

    if (helpURL != null) {
        try {
            editorPane.setPage(helpURL);
        } catch (IOException e) {
            System.err.println("Attempted to read a bad URL: " + helpURL);
        }
    } else {
        System.err.println("Couldn't find file: TextSampleDemoHelp.html");
    }
}

public void valueChanged(ListSelectionEvent e) {
    JList<?> list = (JList<?>) e.getSource();
    updateLabel(imageNames[list.getSelectedIndex()]);
    feedEditor(htmlDocs[list.getSelectedIndex()]);

}

了解发生了什么变化:


  1. 在两个原始的方法中,推导出三个新的方法createEditorList() & createEditorPane(String file) 变成了 makeAEditorPane(), makeAEditorList() & feedEditor(String name)。只需在形成过程中拆分 components editorScrollPane & editorPane 谢谢致@AJNeufeld。
  2. 紧接着,新的 方法 feedEditor(String name), 的功能完全符合其名称的含义。在这里提供我们 URL 的启动,为 [=19 分配一个 HTML 文件 =] 推导和 加载 感谢@Andrew Thompson。
  3. 访问方法feedEditor(htmlDocs[list.getSelectedIndex()]);,在valueChanged(ListSelectionEvent e)方法内部,事件 发生。 JList 之间的 event 称为 list.

总结中...


现在,事件 给前面讨论的 URL 带来了变化。这里说的比较简单;允许在 JList 选择 之间切换,激活 HTML 文件 位于 项目资源 .

就是这样!谢谢大家,注意安全。