Bem, o que to querendo fazer é o seguinte: Eu tenho um JPanel dentro de um JFrame, so que esse JPanel é uma classe que extende do componente, e que possui fundo preto, entao eu configurei a tecla DOWN para mudar para azul a cor da tela, associei essa açao a essa tecla, e depois fiz a associaçao da tecla UP para voltar para preto, porem so esta funcionando a primeira açao, no caso DOWN, e nao ta funcionando a tecla UP, por isso queria saber se é possivel associar duas teclas diferentes a um action, mas nesse mesmo action fazer açoes diferentes conforme a tecla foi clicada, e se eu posso associar a apenas um componente, pois eu vi no exemplo da calculadora que tinha uma açao mas ela era associada a componentes diferentes, cada tecla associada a um componente diferente, mas ela fazia a mesma coisa com a entrada passada. Porem no meu caso eu quero associar duas teclas a um componente apenas, que é o JPanel, e que faça açoes diferentes sobre ele, mas compartlhando a mesma classe, vou mostrar o meu codigo para entender melhor
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Janela extends JFrame
{
private Principal2 panel;
private InputMap imap;
private ActionMap amap;
private JLabel lbl1;
private Action acao1 = new acaoPanel("mudar tela");
private Action acao2 = new acaoPanel("mudar texto");
private Container cont;
public Janela ()
{
super("Teste");
panel = new Principal2 ();
this.setContentPane(panel);
imap = panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
imap.put(KeyStroke.getKeyStroke("DOWN"), "panel");
imap.put(KeyStroke.getKeyStroke("UP"), "panel.lbl1colorchanged");
amap = panel.getActionMap();
amap.put("panel", acao1);
amap.put("panel.lbl1colorchanged", acao2);
setSize (400, 400);
setVisible (true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public class acaoPanel extends AbstractAction
{
String opcao;
public acaoPanel (String acao)
{
this.opcao = acao;
}
public void actionPerformed (ActionEvent e)
{
panel.setBackground(Color.BLUE);
lbl1 = new JLabel ("Teste");
add(lbl1);
repaint();
revalidate();
}
}
public static void main(String[] args)
{
Janela frame = new Janela();
}
}
O codigo da classe Principal2 é esse abaixo
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.util.*;
import javax.swing.*;
public class Principal2 extends JPanel
{
private int pontox;
private int pontoy;
private int comp;
private int alt;
private Container cont;
Graphics2D fundo;
public Principal2()
{
setLayout(new FlowLayout());
setBackground (Color.BLACK);
}
/*public void paintComponent (Graphics g)
{
super.paintComponent(g);
fundo = (Graphics2D) g;
fundo.setPaint(new GradientPaint (600, 0, Color.BLUE, 1, 0, Color.BLACK, true));
this.pontox = ImageObserver.WIDTH;
this.pontoy = ImageObserver.HEIGHT;
this.comp = this.getWidth();
this.alt = this.getHeight();
fundo.fillRect(this.pontox, this.pontoy, this.comp, this.alt);
/*this.pontox = (this.getWidth() / 2) + 1;
this.pontoy = ImageObserver.HEIGHT;
//this.getHeight() / 2;
this.comp = this.getWidth() / 2;
this.alt = this.getHeight();
//System.out.println ("Comprimento: " + this.getWidth());
fundo.setPaint(new GradientPaint (600, 0, Color.BLACK, 1, 0, Color.BLUE, ));
fundo.fillRect(this.pontox, this.pontoy, this.comp, this.alt);
}*/
}
Eu estou com essa duvida, pois nao consegui executar uma açao diferente ao pressionar outra tecla, se é possivel e como devo fazer.