Hallo Java-Gurus,
mein Problem ist ein JButton in einem JPanel!
Der KeyListener im MainFrame funktioniert nur solange, wie der JButton im Panel nicht
instanziiert ist. ( auskommentierte JPanel.add-Methode in interner Klasse 'SwitchPanel' ).
Kann mir jemand helfen?
Danke für eure Hilfe.
GBunge
mein Problem ist ein JButton in einem JPanel!
Der KeyListener im MainFrame funktioniert nur solange, wie der JButton im Panel nicht
instanziiert ist. ( auskommentierte JPanel.add-Methode in interner Klasse 'SwitchPanel' ).
Kann mir jemand helfen?
Java:
package keytest;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class KeyTest extends JPanel implements KeyListener {
JFrame frame;
String mes = "drücke Pfeiltasten";
public KeyTest() {
setPreferredSize( new Dimension( 660, 1140 ));
setBackground( Color.yellow );
frame = new JFrame();
frame.setBounds( 1400, 0, 800, 1140 );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setLayout( new BorderLayout());
doInit();
}
private void doInit() {
frame.addKeyListener( this );
frame.add( "Center", this );
frame.add( "East", new SwitchPanel( this ));
frame.setVisible( true );
}
public void dispatch( String e ) {
if( e == "0") System.exit(0);
}
@Override public void paintComponent( Graphics g ){
super.paintComponent( g );
g.setColor( Color.red );
g.setFont( new Font( "helvetica", Font.ITALIC, 24 ));
g.drawString( mes, 300, 300 );
}
@Override public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if( code == KeyEvent.VK_ENTER ) System.exit(0);
if( code == KeyEvent.VK_LEFT ) mes = "linker Pfeil";
if( code == KeyEvent.VK_RIGHT) mes = "rechter Pfeil";
repaint();
}
@Override public void keyReleased(KeyEvent e) {
}
@Override public void keyTyped(KeyEvent e) {
}
public static void main(String[] args) {
new KeyTest();
}
// Kontroll-Panel-Klasse ++++++++++++++++++++
public class SwitchPanel extends JPanel implements ActionListener {
KeyTest pa;
public SwitchPanel( KeyTest p ) {
pa = p;
setPreferredSize( new Dimension( 140, 1140 ));
setBackground( Color.cyan );
setLayout( new BorderLayout());
// Label oben +++++++++++++++++++++++++
JLabel lab = new JLabel("JLabel");
lab.setPreferredSize( new Dimension( 140, 50 ));
lab.setFont( new Font( "monaco", Font.PLAIN, 20 ));
lab.setHorizontalAlignment( JLabel.CENTER );
// Schalter unten +++++++++++++++++++++
JPanel anz = new JPanel();
anz.setPreferredSize( new Dimension( 140, 50 ));
anz.setBackground( Color.red );
// anz.add( makeButton());
// Panel in der Mitte +++++++++++++++++
JPanel zzz = new JPanel();
zzz.setBackground( Color.blue );
// Componenten einhängen ++++++++++++++
add( "North", lab );
add( "South", anz);
add( "Center", zzz );
}
private JButton makeButton() {
JButton bu = new JButton( "EXIT" );
bu.addActionListener( this );
bu.setActionCommand("0");
bu.setFont( new Font("monaco", Font.PLAIN, 18 ));
bu.setPreferredSize( new Dimension( 140, 40 ));
return bu;
}
@Override public void actionPerformed( ActionEvent e ) {
pa.dispatch( e.getActionCommand());
}
}
}
Danke für eure Hilfe.
GBunge