2013-05-02 3 views
-1

내 Java 메뉴에서 JMenuItem에 ActionListener를 추가하려고합니다.JMenuItem에 ActionListener를 추가하는 방법은 무엇입니까?

enter image description here

나는 "사각형"메뉴 항목을 클릭시 사각형 모양을 보여주기 위해의 ActionListener에 "직사각형"의 JMenuItem를 추가 할 : 여기

메뉴의 스크린 샷이다. ActionListener를 추가하는 데 여러 번 시도했지만 매번 실패합니다. 누군가가 나에게 도움이 경우

import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 

public class shapes extends JPanel{ 
int midX = 220; 
int midY = 90; 
int radius[] = {60,20,50,20}; 
int nPoints = 16; 
int[] X = new int[nPoints]; 
int[] Y = new int[nPoints]; 

public void paintComponent(Graphics gphcs){ 
super.paintComponent(gphcs); 
this.setBackground(Color.WHITE); 

gphcs.setColor(Color.BLUE); 
gphcs.fillRect(20,35,100,30); 

gphcs.setColor(Color.RED); 
gphcs.drawString("Welcome to Java", 20, 20); 

for (int i=0; i < nPoints; i++) { 
     double x = Math.cos(i * ((2 * Math.PI)/nPoints)) * radius[i % 4]; 
     double y = Math.sin(i * ((2 * Math.PI)/nPoints)) * radius[i % 4]; 

     X[i] = (int) x + midX; 
     Y[i] = (int) y + midY; 
} 
gphcs.setColor(Color.GREEN); 
gphcs.fillPolygon(X, Y, nPoints); 
} 
} 

나는 매우 감사 할 것입니다 :

클래스 "menubar.java":

import javax.swing.*; 

public class menubar extends JFrame{ 

public menubar(){ 
    JMenuBar menubar = new JMenuBar(); 
    setJMenuBar(menubar); 

    JMenu shape = new JMenu("Shape"); 
    menubar.add(shape); 

    JMenuItem rect = new JMenuItem("Rectangle"); 
    shape.add(rect); 

    JMenuItem star = new JMenuItem("Star"); 
    shape.add(star); 

    JMenu color = new JMenu("Color"); 
    menubar.add(color); 

    JMenuItem black = new JMenuItem("Black"); 
    color.add(black); 

    JMenuItem orange = new JMenuItem("Orange"); 
    color.add(orange); 
} 

public static void main(String[] args) { 
    menubar gui = new menubar(); 
    gui.setTitle("Menu Bar"); 
    gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    shapes SPS = new shapes(); 
    gui.add(SPS); 
    gui.setSize(500,300); 
    gui.setVisible(true); 
    gui.setLocationRelativeTo(null); 
} 
} 

클래스 "shapes.java"여기

내 코드입니다 이 문제는 시간에 대한

감사합니다 .. 당신이 당신의 용기에 ActionListener를 추가 할 수 있습니다

+1

어디에도'addActionListener (...) '를 호출하려고하지 않았습니다. 스윙 메뉴 자습서를 보셨습니까? 모두들 당신을 위해 철자가되어 있습니다. 그래서 여기에있는 정보를 거부 할 필요가 없습니다. Google에서 찾을 수 있도록 도울 것입니다. 또는 [메뉴 사용 방법] (http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html) –

+2

정말입니까? 이전 질문에서 링크 된 [메뉴 사용 방법] (http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html)을 보았습니까? 투표 마감 – MadProgrammer

+1

@MadProgrammer : 나도 알아, 나도 놀랐다. 그리고 나는 그가 이미 링크를 받았다는 것을 몰랐다! 원래의 포스터에, 이전에 튜토리얼을보고 혼란 스러우면, 당신의 질문에 당신을 혼란스럽게 말 해주세요. 그러나 문제를 여기에 던지기 전에 먼저 그것을 풀려고 시도해보십시오. 노력의 증거. 이 문제에 관해 게으르지 않으려 고하지 말고 다른 사람들이 문제를 해결하도록 노력하고 있다는 것을 보여주십시오. –

답변

-1

한 가지 방법은 다음과 같습니다 JMenuClass이 JFrame의를 확장

공용 클래스를 구현

의 ActionListener

그런 다음 리스너가 필요한 각 JMenuItem에 대해 수행 할 작업은

입니다.

item.addActionListener (이) 클래스의 맨 아래에

, 당신은 당신의 actionPerformed 메소드를 추가 할 필요가, 또는 그러나 당신은 그것을 구현하려는.

건배

+5

-1, 좋은 접근 방법이 아닙니다. 우선 프레임에 새로운 기능을 추가하지 않으므로 JFrame을 확장 할 충분한 이유가 없습니다. 또한 각 메뉴 항목에는 자체 ActionListener가 있어야합니다. – camickr

+0

예, 위의 코드를 사용하여 해당 코드와 함께 제공되는 방법을 제안했습니다. 각 JMenuItem에 자체 리스너가 필요하다고 말하지 않았습니까? – sparkyShorts

+0

'this'를 전달하면 각 JMenuItem이 고유 한 리스너를 얻는 방법은 무엇입니까? ActionListener로? –

관련 문제