Aplikacja wielowatkowa, problem z obsluga zdarzen klawiatury

0

Witam. Co należy zrobić aby zdarzenia klawiatury działały? Bez klawisza działają poprawnie,natomiast z implementacją go nie. metoda dodajP.Dziekuje za pomoc i pozdrawiam

 
public class Klasa extends JFrame implements KeyListener  {
	public Pane p;;
	public Klasa(){
		setSize(200,200);
		p= new Pane();
		add(BorderLayout.CENTER,p);
	    dodajP(p,"Dodaj",new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent arg0) {
				Runnable r = new W(p);
				Thread t = new Thread(r);
				t.start();
				
			}
		}		);
		
		setVisible(true);
		
		
		
		Runnable b = new W(p);
		Thread t = new Thread(b);
		t.start();
		addKeyListener(this);
	}
	
	public void dodajP(Pane k,String title,ActionListener listener){
		
		JButton b = new JButton(title);
		b.addActionListener(listener);
		k.add(BorderLayout.SOUTH,b);
	}
	public static void main(String args[])
	{
		Klasa t = new Klasa();
	}
	
	public void keyPressed(KeyEvent e) {
		System.out.println(e.getKeyChar());
		
	}
	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		System.out.println(e.getKeyChar());
	}
	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		System.out.println(e.getKeyChar());
	}

}

class Pane extends JPanel implements KeyListener
{
	int x =0;
	int y=0;
	String name;
	public Pane()
	{
		setSize(100,100);
		this.setBackground(Color.RED);
		
	
	}
	
	public void move(int xx,int yy,String g){x=xx;y=yy;name=g;}
	
	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D) g;
		g2.drawString(name,x,y);
	}
	
	public void keyPressed(KeyEvent e) {
		System.out.println(e.getID());
		
	}
	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		System.out.println(e.getKeyChar());
	}
	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		System.out.println(e.getKeyChar());
	}
}

class W implements Runnable{
	int war = 0;
	Pane k;
	public W(Pane t)
	{
		k=t;
		
	}
	public void run() {
		for(;war<100;war++)
		{
			Thread t = Thread.currentThread();;
			
			k.move(2*war,war*war,t.getName());
			k.repaint();
			
			try {
				Thread.sleep(700);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				//e.printStackTrace();
			}
		}
	
	}
	
}

0

Mógłbyś to zdanie

Bez klawisza działają poprawnie,natomiast z implementacją go nie. metoda dodajP.
przetłumaczyć na język polski?

0

faktycznie nie po polsku. Bez dodanai JButtona(bez wywolania metody dodajP)

0

Jak jest przycisk, to zdarzenia klawiaturowe nie docierają do słuchacza. Zrób tak:

        public Klasa(){
                setSize(200,200);
                p= new Pane();
                add(p,BorderLayout.CENTER);
                dodajP(p,"Dodaj",new ActionListener()
                {
                        @Override
                        public void actionPerformed(ActionEvent arg0) {
                            Runnable r = new W(p);
                            Thread t = new Thread(r);
                            t.start();
                            getContentPane().requestFocus();      
                        }
                });
                pack();
                setVisible(true);
                getContentPane().requestFocus();
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
                Runnable b = new W(p);
                Thread t = new Thread(b);
                t.start();
                getContentPane().addKeyListener(this);
        }
0

dziekuje Ci bardzo za odp i pomoc. Próbuje wykonać rysowanie na podwojnym buforze lecz mi nie wychodzi. Czy mógłbyś przerobić ten kod by było to mozliwe? Czy w ogóle jest to tu możliwe? dziękuję z góry za pomoc
pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1