jframeを使用してヘルプ コンテンツを表示するためのパブリック クラスAppHelperがあります。同じ JFrame に終了ボタンがあり、クリックすると jframe が破棄されます。ActionListener は、上記のクラスの静的なネストされたクラスとして実装されます。
また、ヘルプ ウィンドウのすべてのコンポーネントは外部クラスで定義されており、それらはすべてプライベートで静的です。また、ヘルプ ウィンドウを表示するメソッドも静的です。
ここに私が実装したいくつかのコードがあります:
public class AppHelper {
// helper frame
private static JFrame appHelperFrame;
// helper panel
private static JPanel appHelperPanel;
// helper pane
private static JEditorPane appHelperPane;
// exit helper button
private static JButton exitAppHelperButton;
// constraints
private static GridBagConstraints appHelperPaneCons, exitAppHelperButtonCons;
/**
set layout
*/
private static void setLayoutConstraints () {
// defines layout
}
/**
* initialize the helper elements
* @param void
* @return void
*/
public static void initializeElements () {
// initialize constraints
setLayoutConstraints();
// handler
AppHelper.AppHelperHandler appHelpHandler = new AppHelper.AppHelperHandler();
appHelperFrame = new JFrame("App Help");
appHelperPanel = new JPanel();
appHelperPanel.setLayout(new GridBagLayout());
appHelperPane = new JEditorPane();
exitAppHelperButton = new JButton("Exit");
exitAppHelperButton.addActionListener(appHelpHandler);
java.net.URL helpURL = null;
try {
helpURL = new File("AppHelp.html").toURI().toURL();
} catch (MalformedURLException ex) {
Logger.getLogger(AppHelper.class.getName()).log(Level.SEVERE, null, ex);
}
try {
appHelperPane.setPage(helpURL);
} catch (IOException ex) {
Logger.getLogger(AppHelper.class.getName()).log(Level.SEVERE, null, ex);
}
appHelperPane.setEditable(false);
appHelperFrame.add(appHelperPanel);
appHelperPanel.add(appHelperPane, appHelperPaneCons);
appHelperPanel.add(exitAppHelperButton, exitAppHelperButtonCons);
appHelperFrame.setSize(350, 400);
appHelperFrame.setResizable(false);
appHelperFrame.setVisible(true);
}
/**
* TODO
*/
public static void showAboutApp() {
//throw new UnsupportedOperationException("Not yet implemented");
}
/**
*
* Acts as the handler for the help window components
* Implement actionListener interface.
*/
private static class AppHelperHandler implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if(source == exitAppHelperButton) {
appHelperFrame.dispose();
}
}
}
}
JFrame を非表示に設定する代わりに破棄する理由は、この JFrame が使用されていないときに、この JFrame がメモリを消費したくないからです。
今問題は、JFrameが表示されている(他のウィンドウで)ヘルプボタンをクリックしたときです。このヘルプ ウィンドウの終了ボタンをクリックすると、JFrame がハンドラによって破棄されます。次にもう一度ヘルプ ボタンをクリックすると、ヘルプ ウィンドウが表示されません。コードにエラーがあるかどうか、または何か他のことをする必要があるかどうかを知りたかったのです。