hallo mein keylistener reagiert nicht hier erstmal der code:
Dieser keylistener soll erst gestartet werden, nachdem die actionperformed methode aufgerufen wurde.
das ganze wird mehreren buttons zugewiesen. das lustige ist bei dem ersten button funktioniert es, klicke ich jedoch andere buttons an nicht. ich erzeuge die buttons in einer for-schleife in einer anderen klasse es muss also an dieser methode hier liegen. vllt kann mir diesmal jemand helfen
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List
import javax.swing.AbstractAction;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
public class PadController
{
List<PadView> list1 = new ArrayList<PadView>();
PadModel padModel;
File datei;
SampleChooser chooser;
SoundPlayer tmpplayer;
boolean isMouseOnButton;
boolean isMousePressed = false;
PadView padView;
PadController padController;
boolean isAlreadyPressed = false;
char taste;
String tasteString;
public PadController(PadModel padModel)
{
this.padModel = padModel;
tmpplayer = new SoundPlayer();
}
public void addToList(PadView padView)
{
this.padView = padView;
addMouseListenerToPad(padView);
list1.add(padView);
}
private void addMouseListenerToPad(PadView padView)
{
padView.addMouseListener(new MouseListener()
{
@Override
public void mouseClicked(MouseEvent arg0)
{
}
@Override
public void mouseEntered(MouseEvent arg0)
{
for (int i = 0; i < list1.size(); i++)
{
if(isMousePressed == false)
{
list1.get(i).changeButtonImage(PadView.ButtonStyle.OVERLAY);
}
else
{
list1.get(i).changeButtonImage(PadView.ButtonStyle.CLICKED);
try
{
tmpplayer.play();
}
catch(Exception e)
{
}
}
}
isMouseOnButton = true;
}
@Override
public void mouseExited(MouseEvent arg0)
{
for (int i = 0; i < list1.size(); i++)
{
list1.get(i).changeButtonImage(PadView.ButtonStyle.NORMAL);
}
isMouseOnButton = false;
}
@Override
public void mousePressed(MouseEvent arg0) {
try
{
if (SwingUtilities.isLeftMouseButton (arg0))
{
for (int i = 0; i < list1.size(); i++)
{
((PadView) list1.get(i)).changeButtonImage(PadView.ButtonStyle.CLICKED);
}
isMousePressed = true;
tmpplayer.play();
}
else if (SwingUtilities.isRightMouseButton (arg0))
{
showMenu(arg0);
}
else if(SwingUtilities.isMiddleMouseButton(arg0))
{
for (int i = 0; i < list1.size(); i++)
{
((PadView) list1.get(i)).changeButtonImage(PadView.ButtonStyle.CHOOSELETTER);
}
}
}
catch (Exception e)
{
}
}
@Override
public void mouseReleased(MouseEvent arg0)
{
for (int i = 0; i < list1.size(); i++)
{
if (isMouseOnButton == false)
{
list1.get(i).changeButtonImage(PadView.ButtonStyle.NORMAL);
}
else
{
list1.get(i).changeButtonImage(PadView.ButtonStyle.OVERLAY);
}
isMousePressed = false;
}
}
});
padView.requestFocus(true);
}
public void showMenu(MouseEvent evt)
{
tasteString = null;
isAlreadyPressed = false;
JPopupMenu menu = new JPopupMenu();
JMenuItem sample = new JMenuItem("Sample hinzufügen");
menu.add((sample));
sample.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0)
{
chooser = new SampleChooser(new ActionListener ()
{
public void actionPerformed (ActionEvent e)
{
datei = chooser.getSelectedFile ();
padModel.setDateiName(datei.getName());
tmpplayer.initialisieren(datei);
chooser.dispose();
}
}, new ActionListener ()
{
@Override
public void actionPerformed(ActionEvent e)
{
chooser.dispose();
}
});
}
});
JMenuItem bindkey = new JMenuItem("Taste zuweisen");
menu.add(bindkey);
System.out.println(padView);
bindkey.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("Los geht´s");
padView.addKeyListener(new KeyListener()
{
@Override
public void keyPressed(KeyEvent e)
{
char key = e.getKeyChar();
System.out.println(key);
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
});
}
});
menu.show(padView, evt.getX(), evt.getY());
}
}
Dieser keylistener soll erst gestartet werden, nachdem die actionperformed methode aufgerufen wurde.
das ganze wird mehreren buttons zugewiesen. das lustige ist bei dem ersten button funktioniert es, klicke ich jedoch andere buttons an nicht. ich erzeuge die buttons in einer for-schleife in einer anderen klasse es muss also an dieser methode hier liegen. vllt kann mir diesmal jemand helfen
Zuletzt bearbeitet von einem Moderator: