2

これが私のメインクラスです:

import javax.swing.*;

public class WordProcessor {

    public static void main(String[] args) {           
        MainFrame frame = new MainFrame("Word Processor", 10000, 10000);
    }
} 

他に2つのクラスがあります

import javax.swing.*;

public class MainFrame extends JFrame {

    JMenuBar menubar = new JMenuBar();            

    public MainFrame(String name, int x, int y) {
        setTitle(name);
        setSize(x, y);
        setVisible(true);
        setJMenuBar(menubar); 
        //creates file menu and adds to menubar
        //TODO populate with JMenuItems 
        JMenu filemenu = new JMenu("file");
        filemenu.setVisible(true);
        menubar.add(filemenu);

        buttonnew buttonnew = new buttonnew("new");
        buttonnew.setVisible(true);
        filemenu.add(buttonnew);
        buttonnew.addMouseListener(buttonnew);
    }
}

そして最後に

import javax.swing.*;
import java.awt.event.*;

public class buttonnew extends JMenuItem implements MouseListener{

    buttonnew(String s) {
          super();
          super.setText(s);        
    }

    public void mouseClicked(MouseEvent e){         
          System.out.println("hey-o");
    } 

    @Override
    public void mouseExited(MouseEvent e) {
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseReleased(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
    }        
}

ボタンをクリックしても何も起こりません。私はとても迷っています!

4

2 に答える 2

9

ソリューション:

  1. JMenuItems で MouseListeners を使用しないでください。彼らは ActionListeners を使用することになっています。
  2. 新しいツールを使用する場合は、チュートリアルをお読みください。Swing メニューのチュートリアルでは、これらすべてと、メニューを適切に使用する方法について説明しています。
  3. また、1 つのクラスにあまりにも多くのロールを再生させて Cohesion OOP ルールに違反しているため、GUI クラスにリスナー インターフェイスを実装させないことをお勧めします。
于 2013-06-08T03:43:22.520 に答える
8

How to Use Menu Itemsに関する Swing チュートリアルを読んでください。MouseListener を使用しないでください。メニュー項目に ActionListener を追加する必要があります。

チュートリアルには、 と のセクションもHow to Write an Action ListenerありHow to Write a Mouse Listenerます。

public class buttonnew extends JMenuItem implements MouseListener{

また、クラス名は小文字ではなく大文字で始める必要があります。

buttonnew.setVisible(true);

Swing コンポーネント (トップ レベル ウィンドウを除く) は、デフォルトで上記のコードに表示される必要はありません。

MainFrame frame = new MainFrame("Word Processor", 10000, 10000);

フレームのサイズをハードコーディングしないでください。私の画面は 1376 x 768 しかありません。次のいずれかを使用する必要があります。

frame.pack();

または全画面表示の場合は、次を使用できます。

frame.setExtendedState(...);

すべてのコンポーネントをフレームに追加するまで、フレームを表示しないでください。

setTitle(name);
setSize(x, y);
setVisible(true);
setJMenuBar(menubar);
于 2013-06-08T03:44:03.297 に答える