Hallo Forum
Auf einem Desktop werden zwei Fenster angezeigt, das "Menufenster" und das "Eingabefenster".
Wird im Eingabefenster etwas eingetippt und danach im Menufenster auf "übertragen" geklickt, öffnet sich ein drittes Fenster "Ausgabefenster", das den getippten Text enthält.
Statt dem eingetippten Text erhalte ich eine NullPointerException: String is null.
Irgendwie verständlich, da bei meiner Parameterübergabe von der Main- zur Menu-Klasse die Variable input.s ja noch nicht belegt ist. Liegts daran?
Was muss ich ändern, damits funktioniert? Wie programmiert man so etwas "schön"?
Vielen Dank für eure Hilfe.
Auf einem Desktop werden zwei Fenster angezeigt, das "Menufenster" und das "Eingabefenster".
Wird im Eingabefenster etwas eingetippt und danach im Menufenster auf "übertragen" geklickt, öffnet sich ein drittes Fenster "Ausgabefenster", das den getippten Text enthält.
Statt dem eingetippten Text erhalte ich eine NullPointerException: String is null.
Irgendwie verständlich, da bei meiner Parameterübergabe von der Main- zur Menu-Klasse die Variable input.s ja noch nicht belegt ist. Liegts daran?
Was muss ich ändern, damits funktioniert? Wie programmiert man so etwas "schön"?
Vielen Dank für eure Hilfe.
Code:
public class Main extends JApplet {
private JDesktopPane desktop = new JDesktopPane();
private JInternalFrame menuWindow = new JInternalFrame( "Menufenster", true, true, true, true );
private JInternalFrame inputWindow = new JInternalFrame( "Eingabefenster", true, true, true, true );
public void init() {
Input input = new Input();
inputWindow.add( input );
inputWindow.setBounds( 5, 5, 150, 300 );
inputWindow.setVisible( true );
desktop.add( inputWindow );
Menu menu = new Menu( desktop, input );
menuWindow.add( menu );
menuWindow.setBounds( 5, 5, 150, 300 );
menuWindow.setVisible( true );
desktop.add( menuWindow );
this.add( desktop );
this.setVisible( true );
}
}
public class Menu extends JPanel {
private JDesktopPane desktop;
private JInternalFrame outputWindow = new JInternalFrame( "Ausgabefenster", true, true, true, true );
private Input input;
Menu( JDesktopPane _desktop, Input _input ) {
desktop = _desktop;
input = _input;
JButton button = new JButton( "übertragen" );
button.addActionListener( new buttonAL() );
this.add( button );
}
class buttonAL implements ActionListener {
public void actionPerformed( ActionEvent _e ) {
outputWindow.setOpaque( true );
Output output = new Output( input );
outputWindow.add( output );
outputWindow.setBounds( 50, 50, 400, 600 );
outputWindow.setVisible( true );
desktop.add( outputWindow );
}
}
}
public class Input extends JPanel {
private JTextField textfield = new JTextField( 20 );
private String s;
Input() {
textfield.addKeyListener( new InputKL() );
this.add( textfield );
}
public String getInput() {
return s;
}
class InputKL implements KeyListener {
public void keyTyped( KeyEvent _e ) {}
public void keyPressed( KeyEvent _e ) {}
public void keyReleased( KeyEvent _e ) {
JTextField tf = (JTextField)_e.getSource();
String s = tf.getText();
System.out.println( s );
}
}
}
public class Output extends JPanel {
private String s;
Output( Input _input ) {
s = _input.getInput();
System.out.println( s );
}
@Override
protected void paintComponent( Graphics g ) {
g.drawString( s, 0, 20 );
}
}