[解決済み] JMenuItemにActionListenerを追加する
2022-02-10 08:06:07
質問
簡単なGUIプロジェクトを始めたところですが、メニューバーを作成しているときに、不可解なエラーに遭遇しました。私は
ActionListener
を
JMenuItem
を使って
addActionListener
を、これまでと同じように使っています。しかし、このメソッドを適用すると、Eclipseはエラーを出します: "Syntax error on token "addActionListener", = expected after this token." 私の唯一の考えは、おそらくは
addActionListener
がメソッドではなくプロパティとして解釈されているようです...しかし、過去にこのメソッドを使ったことがあるので、動作することは知っています。どの程度のコードを提供すればいいのか分からないので、もっと編集した方がいいのかどうか教えてください。
package com.movethehead;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
@SuppressWarnings("serial")
public class Main extends JFrame {
private final int W = 500;
private final int H = 500;
JMenuBar menuBar = new JMenuBar();
JMenu file = new JMenu("File");
JMenuItem exitItem = new JMenuItem("Exit");
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
System.exit(0);
}
});
JMenu headMenu = new JMenu("Heads");
JMenu bgMenu = new JMenu("Backgrounds");
public Main() {
setTitle("Move the Head");
setSize(W, H);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
add(new Pnl());
setJMenuBar(menuBar);
} // end constructor
public static void main( String[] args ) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Main f = new Main();
f.setVisible(true);
}
});
} // end main()
} // end Main
解決方法は?
私には、次のように見えます。
JMenuBar menuBar = new JMenuBar();
JMenu file = new JMenu("File");
JMenuItem exitItem = new JMenuItem("Exit");
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
System.exit(0);
}
});
JMenu headMenu = new JMenu("Heads");
はメソッド定義の外にあり、そのコードを呼び出す方法はありません。
これを試してみてください。
public class Main extends JFrame{
//initialize integer height/width values along with declaring
//Swing component variables
private final int W = 500,
H = 500;
private JMenu file, headMenu, bgMenu;
private JMenuBar menuBar;
private JMenuItem exitItem;
//constructor
public Main(){
setTitle("Move the Head");
setSize(W, H);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
initializeElements();
}
//Initializes the elements, this part is missing from your code above.
public void initializeElements(){
menuBar = new JMenuBar();
file = new JMenu("File");
exitItem = new JMenuItem("Exit");
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
System.exit(0);
}
});
headMenu = new JMenu("Heads");
bgMenu = new JMenu("Backgrounds");
}
public static void main( String[] args ) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Main f = new Main();
f.setVisible(true);
}
});
}
}
関連
-
[解決済み】HTTPステータス 405 - リクエストメソッド「POST」はサポートされていません (Spring MVC)
-
[解決済み】Android Studio クラス org.codehaus.groovy.runtime.InvokerHelper を初期化できませんでした。
-
[解決済み】エラー:'if'のない'else'エラー
-
[解決済み】Javaの".class期待値"
-
[解決済み】HTTPステータス500 サーブレットクラスのインスタンス化エラー [重複]。
-
[解決済み】なぜjava.io.Fileにはcloseメソッドがないのでしょうか?
-
[解決済み】「java -cp」と「java -jar」の違い?
-
[解決済み] [Solved] java.lang.NoClassDefFoundError: クラスXXXを初期化できませんでした。
-
[解決済み】javaで無効な文字定数
-
[解決済み] actionとactionListenerの違い
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] java.sql.SQLException: ユーザー 'root'@'localhost' (using password: YES) のためのアクセスが拒否されました。
-
[解決済み】エラー:配列または java.lang.Iterable のインスタンスに対してのみ反復処理を行うことができます。
-
[解決済み】代入の左手は必ず変数 CharAt
-
[解決済み】popBackStack()とreplace()の操作はどう違うのですか?
-
[解決済み】Android Studioでタスク :app:compileDebugJavaWithJavac の実行に失敗しました。
-
[解決済み】"|="の意味は何ですか?(パイプ等号演算子)
-
[解決済み] hibernate のプロパティが見つかりません。
-
[解決済み】デフォルトのキーストアファイルが存在しない?
-
[解決済み】Gradleがtools.jarを見つけ出さない
-
[解決済み】Javaを使用するSelenium - ドライバの実行ファイルのパスは、webdriver.gecko.driverシステムプロパティで設定する必要があります。