2014-09-17 3 views
0

학교용으로 설계된 사운드 보드 프로그램이 있습니다. 나는 실제로 내가 원하는 모든 프로그램을 쓸 수있다. 다음과 같이 코드를 작성했습니다.개별 버튼에 기능 설정

package soundboard; 

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

public class Soundboard implements ActionListener{ 

JButton loadButton; 
JButton clearButton; 
JButton Button1; 
JButton Button2; 
JButton Button3; 
JButton Button4; 
JPanel mainsPanel; 
int load; 

public void windowCreate() { 

    JFrame frame = new JFrame(); 
    mainsPanel = new JPanel(); 


    loadButton = new JButton("Load..."); 
    loadButton.setSize(80, 30); 
    loadButton.setLocation(4, 4); 
    loadButton.addActionListener(this); 

    clearButton = new JButton("Clear"); 
    clearButton.setSize(80, 30); 
    clearButton.setLocation(92, 4); 
    clearButton.addActionListener(this); 


    Button1 = new JButton("1"); 
    Button1.setSize(80, 80); 
    Button1.setLocation(4, 45); 
    Button1.addActionListener(this); 

    Button2 = new JButton("2"); 
    Button2.setSize(80, 80); 
    Button2.setLocation(92, 45); 
    Button2.addActionListener(this); 

    Button3 = new JButton("3"); 
    Button3.setSize(80, 80); 
    Button3.setLocation(4, 133); 
    Button3.addActionListener(this); 

    Button4 = new JButton("4"); 
    Button4.setSize(80, 80); 
    Button4.setLocation(92, 133); 
    Button4.addActionListener(this); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setResizable(false); 
    frame.add(loadButton); 
    frame.add(clearButton); 
    frame.add(Button1); 
    frame.add(Button2); 
    frame.add(Button3); 
    frame.add(Button4); 
    frame.add(mainsPanel); 

    frame.setSize(183,245); 
    frame.setVisible(true); 
    frame.setLocationRelativeTo(null);     
} 

@Override 
public void actionPerformed(ActionEvent event){ 
    load += 1; 
    System.out.println(load);   
} 

public static void main(String[] args){ 
    Soundboard window = new Soundboard(); 
    window.windowCreate(); 
} 


} 

이 예제에서 모든 단일 버튼은 똑같은 기능을합니다. 어떻게,이 기본 코드를 사용하여, 나는 단추가 그들 자신의 개별적인 일을하도록 설정 했는가? 나는 그것을 설계하여 "로드"버튼을 누른 다음 숫자 버튼이 그 버튼에 소리를로드하도록 계획합니다. 로드를 치지 않고 숫자 버튼을 누르면 먼저 지정된 사운드가 재생됩니다. "clear"를 누르면 모든 버튼이 언로드됩니다. 대신

ButtonX.addActionListener(this); 

기록

ButtonX.addActionListener(e -> { 
     //do stuff here 
    }); 

->

+0

자신의 [익명의 ActionListener를] 쓰기 (http://stackoverflow.com/questions/284899/how-do-you-add-an-actionlistener- 아래입니다 to-a-jbutton-in-java)를 구현할 필요가 없습니다. Soundboard는 ActionListener가 아니어야합니다. 대신 JPanel이 될 수 있습니다. – Compass

+0

변수 이름은 대문자로 시작하면 안됩니다. "Button1"은 "button1"이어야합니다. – camickr

+0

KK, 나는 그것을 실제로 알고있다 - 단지 그것을 놓쳤다. 상기시켜 주셔서 감사합니다 camickr – ob103ninja

답변

2

이 기본적 기능 인터페이스를 익명으로 클래스를 생성하고, 인수로서 건네 람다 식임을 의미한다. 람다 식에 대한 자세한 내용은 내 가이드 here 또는 공식 (그러나 긴) 자습서 here을 읽을 수 있습니다.

모든 람다 식을 한 후, 당신은 당신의 클래스에서

@Override 
public void actionPerformed(ActionEvent event){ 
    load += 1; 
    System.out.println(load);   
} 

implements ActionListener 

을 제거 할 수 있습니다.

+0

이것은 실제로 매우 도움이됩니다. 고맙습니다! – ob103ninja

2

버튼을 분리 할 때 다른 작업을 수행해야합니다. 수행하는 방법에 부하 및 지우기 버튼

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

public class Soundboard implements ActionListener{ 

JButton loadButton; 
JButton clearButton; 
JButton Button1; 
JButton Button2; 
JButton Button3; 
JButton Button4; 
JPanel mainsPanel; 
int load; 

public void windowCreate() { 


    JFrame frame = new JFrame(); 
    mainsPanel = new JPanel(); 


    loadButton = new JButton("Load..."); 
    loadButton.setSize(80, 30); 
    loadButton.setLocation(4, 4); 
    loadButton.addActionListener(e -> System.out.println("load action")); 

    clearButton = new JButton("Clear"); 
    clearButton.setSize(80, 30); 
    clearButton.setLocation(92, 4); 
    clearButton.addActionListener(e -> System.out.println("Clear action")); 


    Button1 = new JButton("1"); 
    Button1.setSize(80, 80); 
    Button1.setLocation(4, 45); 
    Button1.addActionListener(this); 

    Button2 = new JButton("2"); 
    Button2.setSize(80, 80); 
    Button2.setLocation(92, 45); 
    Button2.addActionListener(this); 

    Button3 = new JButton("3"); 
    Button3.setSize(80, 80); 
    Button3.setLocation(4, 133); 
    Button3.addActionListener(this); 

    Button4 = new JButton("4"); 
    Button4.setSize(80, 80); 
    Button4.setLocation(92, 133); 
    Button4.addActionListener(this); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setResizable(false); 
    frame.add(loadButton); 
    frame.add(clearButton); 
    frame.add(Button1); 
    frame.add(Button2); 
    frame.add(Button3); 
    frame.add(Button4); 
    frame.add(mainsPanel); 

    frame.setSize(183,245); 
    frame.setVisible(true); 
    frame.setLocationRelativeTo(null);     
} 

@Override 
public void actionPerformed(ActionEvent event){ 
    load += 1; 
    System.out.println(load);   
} 

public static void main(String[] args){ 
    Soundboard window = new Soundboard(); 
    window.windowCreate(); 
} 


}