2
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);
            }
        }
    });
}

同じように機能するさまざまなハイパーリンクがあるため、上記の EditorPane をさまざまな GUI で再利用しようとしています。

しかし、それを呼び出すinitEditorPaneGUI でメソッドを呼び出す方法がわかりません。

ここに私が意味するものがあります:

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);

それらを何に変更しますか?

4

1 に答える 1

0

あなたのシステムがどのように設計されているのかわからないので、難しい質問です。ここに2つの提案があります:

  1. オブジェクトのコンストラクターからメソッドを自動的に呼び出すinitEditorPane(これらすべてのペインがサポートされている必要がある場合)
  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);
    }
  }
}
于 2013-02-09T16:33:45.457 に答える