Swing Focus bekommen

Hatschi

Aktives Mitglied
Java:
package snake.gui;

import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import toolkit.gui.BasicFrame;


public class MainWnd extends BasicFrame implements KeyListener, ChangeListener {
    private Canvas canvas;
    private int dt = 75;
    
    
    public MainWnd() {
        super();
        
        init();
        addSlider();
        addCanvas();
    }
    
    
    @Override
    public void keyPressed(KeyEvent e) {
        if(canvas!=null) canvas.keyPressend(e.getKeyCode());
    }


    @Override
    public void keyReleased(KeyEvent e) {}


    @Override
    public void keyTyped(KeyEvent e) {}
    
    
    @Override
    protected void windowClosing() {
        System.out.println("developed by Nis Meinert");
    }
    
    
    @Override
    public void stateChanged(ChangeEvent e) {
        int dt = ((JSlider)e.getSource()).getValue();
        dt += 25;
    }
    
    
    private void init() {
        setTitle("Snake");
        setLayout(new BorderLayout());
        setSize(300, 300);
        centerOnScreen();
        
        addKeyListener(this);
    }
    
        
    private void addCanvas() {
        canvas = new Canvas();
        add(BorderLayout.CENTER, canvas);
    }
    
    
    private void addSlider() {
        JSlider slider = new JSlider(0, 100, 50);
        slider.addChangeListener(this);
        slider.setPaintTicks(true);
        slider.setMinorTickSpacing(10);
        add(BorderLayout.SOUTH, slider);
    }
}

Wenn ich das ganze ausführe, dann habe ich ein JFrame mit einem JPanel (heißt hier Canvas) und nen JSlider. Nun hat das ganze nen Keylistener. Der funktioniert aber irgendwie nicht mehr seitdem der JSlider da ist, der JSlider scheint irgendwie auch anfocussiert zu sein, der hat zumindestens so nen gestrichelt Rand drum herum.
a.) wie repariere ich den Keylistener?
b.) wie kriege ich diesen Focus vom JSlider runter?
 
mh, das will irgendwie alles nicht :-(

das ist aber ja auch schon irgenwie nicht richtig, dass der JSlider so anfocusiert ist, oder?
 
was auch immer richtig ist oder nicht, bei mir funktioniert es einigermaßen,
wobei es requestFocusInWindow() lauten muss

im Programm unten ist standardmäßig ist der JSlider fokussiert,
kann man aber auch auf das ContentPane-Panel oder das JFrame selber umstellen

Java:
public class TestGUI  extends JFrame {
    public TestGUI() {
        KeyListener k = new KeyAdapter()  {
                public void keyTyped(KeyEvent e) {
                    System.out.println("source: " + e.getSource().getClass().getSimpleName());
                }
            };
        getContentPane().addKeyListener(k);
        addKeyListener(k);

        JSlider sl = new JSlider();
        sl.addKeyListener(k);
        add(sl, BorderLayout.SOUTH);

        setSize(200, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        getContentPane().requestFocusInWindow();
        // requestFocusInWindow();
    }

    public static void main(String[] args) {
        new TestGUI();
    }
}
 
mh, das funktioniert jetzt, aber ist trotzdem komisch, das der JSlider so anfocusiert wird (also spätstens wenn ich drauf klicke) das macht der doch in anderen Anwendungen auch nicht, sieht voll noobich aus :-(
 

Zurück
Oben