Я новичок на этом сайте и пытаюсь сделать Drumpad/Launchpad/DrumMachine (пока еще нет определенного имени), и у меня есть 26 кнопок с 26 различными звуками, и я хочу для привязки кнопок к клавиатуре, и я думаю, что сделал это, но проблема в том, что кнопка клавиатуры не работает, пока я не нажму кнопку, и после нажатия другой кнопки предыдущая кнопка не работает с клавиатуры, любой может помочь с решением Это?Как заставить кнопки работать отделимо друг от друга
Вот мой код сейчас:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
public class DrumPad extends JFrame implements ActionListener, KeyListener{
public static JComponent component;
ArrayList<File> f = new ArrayList<File>();
Buttons bEx, btnButton_1;
File wavFile = new File("loopbase\\loop1");
File[] allfiles = wavFile.listFiles();
ArrayList<AudioClip> sounds = new ArrayList<AudioClip>();
AudioClip sound;
JComboBox comboBox;
public static void main (String [] args) throws Exception{
DrumPad game=new DrumPad();
game.setVisible(true);
game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public DrumPad() throws Exception {
try{sound = Applet.newAudioClip(wavFile.toURL());}
catch(Exception e){e.printStackTrace();}
for(File i:allfiles){
sounds.add(Applet.newAudioClip(i.toURL()));
}
setResizable(false);
setSize(700,300);
setTitle("Test");
setContentPane(new JLabel(new ImageIcon("image.jpg")));
getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
JPanel Menu = new JPanel();
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation(dim.width/2-this.getSize().width/2, dim.height/2-this.getSize().height/2);
Menu.setAlignmentX(Component.LEFT_ALIGNMENT);
FlowLayout fl_Menu = (FlowLayout) Menu.getLayout();
fl_Menu.setAlignment(FlowLayout.LEFT);
fl_Menu.setVgap(20);
fl_Menu.setHgap(50);
Menu.setSize(new Dimension(200, 200));
getContentPane().add(Menu);
JLabel lblMakingUpThe = new JLabel("Test");
Menu.add(lblMakingUpThe);
JSlider slider = new JSlider();
Menu.add(slider);
slider.setOpaque(false);
JPanel ButtonsArea = new JPanel();
ButtonsArea.setOpaque(false);
Menu.setOpaque(false);
getContentPane().add(ButtonsArea);
Buttons btnButton = new Buttons("Button1");
ButtonsArea.setLayout(new GridLayout(3, 5, 5, 3));
ButtonsArea.add(btnButton);
Buttons btnButton_1 = new Buttons("Button2");
ButtonsArea.add(btnButton_1);
btnButton_1.getInputMap().put(KeyStroke.getKeyStroke("W"),"play");
btnButton_1.getActionMap().put("play", play);
Buttons btnButton_2 = new Buttons("button3");
ButtonsArea.add(btnButton_2);
Buttons btnButton_3 = new Buttons("button4");
ButtonsArea.add(btnButton_3);
Buttons btnButton_4 = new Buttons("button5");
ButtonsArea.add(btnButton_4);
Buttons btnButton_5 = new Buttons("button6");
ButtonsArea.add(btnButton_5);
Buttons btnButton_6 = new Buttons("button7");
ButtonsArea.add(btnButton_6);
Buttons btnButton_7 = new Buttons("button8");
ButtonsArea.add(btnButton_7);
Buttons btnButton_8 = new Buttons("button9");
ButtonsArea.add(btnButton_8);
Buttons btnButton_9 = new Buttons("button10");
ButtonsArea.add(btnButton_9);
Buttons btnButton_10 = new Buttons("button11");
ButtonsArea.add(btnButton_10);
Buttons btnButton_11 = new Buttons("button12");
ButtonsArea.add(btnButton_11);
Buttons btnButton_12 = new Buttons("button13");
ButtonsArea.add(btnButton_12);
Buttons btnButton_13 = new Buttons("button14");
ButtonsArea.add(btnButton_13);
Buttons btnButton_14 = new Buttons("button15");
ButtonsArea.add(btnButton_14);
Buttons btnButton_15 = new Buttons("button16");
ButtonsArea.add(btnButton_15);
Buttons btnButton_16 = new Buttons("button15");
ButtonsArea.add(btnButton_16);
Buttons btnButton_17 = new Buttons("button18");
ButtonsArea.add(btnButton_17);
JButton btnButton_18 = new JButton("button19");
ButtonsArea.add(btnButton_18);
JButton btnButton_19 = new JButton("button20");
ButtonsArea.add(btnButton_19);
JButton btnButton_20 = new JButton("button21");
ButtonsArea.add(btnButton_20);
JPanel Functions = new JPanel();
getContentPane().add(Functions);
Functions.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
JComboBox comboBox = new JComboBox();
comboBox.setModel(new DefaultComboBoxModel(new String[] {"Test", "Techno", "Beats"}));
Functions.add(comboBox);
Functions.setOpaque(false);
JToggleButton tglbtnSoundsOff = new JToggleButton("Sounds OFF");
Functions.add(tglbtnSoundsOff);
for(int i=0;i<sounds.size();i++){
Buttons j = (Buttons) ButtonsArea.getComponent(i);
j.clip=sounds.get(i);
j.addActionListener(this);
}
}
Action play = new AbstractAction(){
public void actionPerformed(ActionEvent e) {
if(e.getSource().getClass()==Buttons.class)((Buttons)e.getSource()).clip.play();
}
};
public void actionPerformed(ActionEvent ae){
if(ae.getSource().getClass()==Buttons.class)((Buttons)ae.getSource()).clip.play();
}
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
//System.out.println("keyPressed="+KeyEvent.getKeyText(e.getKeyCode()));
}
public void keyReleased(KeyEvent e) {
//System.out.println("keyReleased="+KeyEvent.getKeyText(e.getKeyCode()));
}
}
class Buttons extends JButton{
public Buttons() {
super();
// TODO Auto-generated constructor stub
}
public Buttons(Action a) {
super(a);
// TODO Auto-generated constructor stub
}
public Buttons(Icon icon) {
super(icon);
// TODO Auto-generated constructor stub
}
public Buttons(String text, Icon icon) {
super(text, icon);
// TODO Auto-generated constructor stub
}
public Buttons(String text) {
super(text);
// TODO Auto-generated constructor stub
}
public AudioClip clip;
}
, а также, я использовал WindowBuilder, чтобы создать это.
Вы просто хотите, когда вы нажимаете W, она будет играть? –
Не только W, полный алфавит (код скважины еще не заполнен). – EiKei
Следуйте соглашениям об именах Java. Имена переменных не должны начинаться с символа верхнего регистра. Не составляйте свои собственные соглашения об именах и учитесь на примерах в учебнике или учебнике. – camickr