gpt4 book ai didi

java - 跨应用程序重用 JEditorPane

转载 作者:行者123 更新时间:2023-11-29 09:06:22 26 4
gpt4 key购买 nike

public class EditorPane extends javax.swing.JPanel {

/**
* Creates new form EditorPane
*/
public EditorPane() {
initComponents();
}

private void launchHyperLink(HyperlinkEvent e) {
try {
if (System.getProperty("os.name").toLowerCase().contains("windows")) {

String cmdFileLocation = System.getenv("windir") + File.separator + "system32" + File.separator + "cmd.exe";
Runtime.getRuntime().exec(new String[]{cmdFileLocation, "/c", "start", e.getDescription()});
}
} catch (IOException ex) {
Logger.getLogger(MainMenu.class.getName()).log(Level.SEVERE, null, ex);
}
}

private void initEditorPane(JEditorPane editorPane) {
editorPane.setBorder(null);
editorPane.setContentType("text/html");
editorPane.setEditable(false);
editorPane.setOpaque(false);
editorPane.addHyperlinkListener(new HyperlinkListener() {

@Override
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
launchHyperLink(e);
}
}
});
}

我正在尝试在多个不同的 GUI 中重复使用上述 EditorPane,因为它们具有各种超链接,其行为方式相同。

但我不确定如何在调用它的 GUI 中调用 initEditorPane 方法。

我的意思是:

public class MainMenu extends javax.swing.JFrame {

private AcademicDTO ac;

public MainMenu(AcademicDTO academicDTO) {
this.ac = academicDTO;
initComponents();
searchTable.init(GUIStaticDataHelper.ACADEMIC_SUMMARY_COLUMNS);
myContactTable.init(GUIStaticDataHelper.CONTACT_SUMMARY_COLUMNS);
initEditorPane(emailTxtComp);
initEditorPane(pageTxtComp);
initComponentsWithData();
initListeners();
}

public void initComponentsWithData() {
nameLabel.setText("" + ac.getTitle() + " " + ac.getForename() + " " + ac.getSurname());
roleLabel.setText(ac.getRole());
roomLabel.setText("Room: " + ac.getRoom());
pageLabel.setText("Page:");
pageTxtComp.setText("<html>&nbsp;<a href='" + ac.getPage() + "'>" + ac.getPage() + "</a>&nbsp;</html>");
hoursLabel.setText("Hours: " + ac.getHours());
phoneLabel.setText("Phone: " + ac.getPhone());
mobileLabel.setText("Mobile: " + ac.getMobile());
emailLabel.setText("Email:");
myContactTable.setData(ac.getContacts());
if (ac.getImage() != null) {
imageLabel.setIcon(new ImageIcon(ac.getImage()));
}
emailTxtComp.setText("<html>&nbsp;<a href='mailto://" + ac.getEmail() + "'>" + ac.getEmail() + "</a>&nbsp;</html> ");
}

emailTxtComppageTxtComp 现在都是类型 EditorPane 而不是 JEditorPane。所以方法 initEditorPane(JEditorPane editorPane) 不能使用。

还有线条

initEditorPane(emailTxtComp);
initEditorPane(pageTxtComp);

我要把它们改成什么?

最佳答案

这个问题很难,因为我不知道你的系统是如何设计的。这里有 2 个建议:

  1. 从对象的构造函数中自动调用方法initEditorPane(如果所有这些 Pane 都应该支持的话)
  2. 在 EditorPane 中进行静态初始化。

    public static void buildPane(EditorPane aPane) { initEditorPane(aPane.editorPane);

而且,正如 trashgod 在评论中所说,从 Java 6 开始,您可以使用 Desktop 类来调用浏览器。

protected void launchHyperLink(HyperlinkEvent e) {
if (Desktop.isDesktopSupported()) {
try {
Desktop.getDesktop().browse(e.getURL().toURI());
} catch (Exception ex) {
Logger.getLogger(MainMenu.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

关于java - 跨应用程序重用 JEditorPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14788551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com