1
| Da opgavens tre delløsninger er inkrementerende
vil vi kun se den endelige løsning efter figur 1c.
|
|
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class MenuFrame extends JFrame implements ActionListener {
private JMenuItem saveSettingsMI, loadSettingsMI, savePositionMI;
public MenuFrame( String titel ) {
super( titel );
setJMenuBar( makeMenuBar() );
setDefaultCloseOperation( EXIT_ON_CLOSE );
setSize( 300, 100 );
setVisible( true );
}
private JMenuBar makeMenuBar() {
JMenuBar bar = new JMenuBar();
JMenu settingsMenu = new JMenu( "Settings" );
settingsMenu.setMnemonic( 'E' );
saveSettingsMI = new JMenuItem( "Save" );
saveSettingsMI.setMnemonic( 'S' );
saveSettingsMI.setAccelerator(
KeyStroke.getKeyStroke( 'S', Event.CTRL_MASK ) );
saveSettingsMI.addActionListener( this );
settingsMenu.add( saveSettingsMI );
loadSettingsMI = new JMenuItem( "Load" );
loadSettingsMI.setMnemonic( 'L' );
loadSettingsMI.setAccelerator(
KeyStroke.getKeyStroke( 'L', Event.CTRL_MASK ) );
loadSettingsMI.addActionListener( this );
settingsMenu.add( loadSettingsMI );
settingsMenu.addSeparator();
savePositionMI = new JMenuItem( "Save position" );
savePositionMI.setMnemonic( 'P' );
savePositionMI.setAccelerator(
KeyStroke.getKeyStroke( 'P', Event.CTRL_MASK ) );
savePositionMI.addActionListener( this );
settingsMenu.add( savePositionMI );
bar.add( settingsMenu );
return bar;
}
public void actionPerformed( ActionEvent e ) {
Object source = e.getSource();
if ( source == saveSettingsMI )
System.out.println( "Save settings" );
else if ( source == loadSettingsMI )
System.out.println( "Load settings" );
else if ( source == savePositionMI )
System.out.println( "Save position" );
}
} |
|
2
|
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class MenuFrame extends JFrame implements ActionListener {
private JMenuItem exitMI, newWindowMI, newPostMI, newMessageMI;
private JMenu newMI;
public MenuFrame( String titel ) {
super( titel );
setJMenuBar( makeMenuBar() );
setDefaultCloseOperation( EXIT_ON_CLOSE );
setSize( 300, 100 );
setVisible( true );
}
private JMenuBar makeMenuBar() {
JMenuBar bar = new JMenuBar();
JMenu fileMenu = new JMenu( "File" );
fileMenu.setMnemonic( 'F' );
newMI = new JMenu( "New" );
newMI.setMnemonic( 'N' );
newWindowMI = new JMenuItem( "Window" );
newWindowMI.setMnemonic( 'W' );
newWindowMI.setAccelerator(
KeyStroke.getKeyStroke( 'W', Event.CTRL_MASK ) );
newWindowMI.addActionListener( this );
newMI.add( newWindowMI );
newMI.addSeparator();
newPostMI = new JMenuItem( "Post" );
newPostMI.setMnemonic( 'P' );
newPostMI.setAccelerator(
KeyStroke.getKeyStroke( 'P', Event.CTRL_MASK ) );
newPostMI.addActionListener( this );
newMI.add( newPostMI );
newMessageMI = new JMenuItem( "Message" );
newMessageMI.setMnemonic( 'M' );
newMessageMI.setAccelerator(
KeyStroke.getKeyStroke( 'M', Event.CTRL_MASK ) );
newMessageMI.addActionListener( this );
newMI.add( newMessageMI );
fileMenu.add( newMI );
fileMenu.addSeparator();
exitMI = new JMenuItem( "Exit" );
exitMI.setMnemonic( 'X' );
exitMI.setAccelerator(
KeyStroke.getKeyStroke( 'X', Event.CTRL_MASK ) );
exitMI.addActionListener( this );
fileMenu.add( exitMI );
bar.add( fileMenu );
return bar;
}
public void actionPerformed( ActionEvent e ) {
Object source = e.getSource();
if ( source == exitMI )
terminate();
else if ( source == newWindowMI )
System.out.println( "New Window" );
else if ( source == newPostMI )
System.out.println( "New Post" );
else if ( source == newMessageMI )
System.out.println( "New Message" );
}
private void terminate() {
dispose();
System.exit(0);
}
} |
|
| Bemærk at selve termineringen placeres i en service-metode; hvilket
fjerne de par linier kode-redundanse, som eller ville opstå.
|
3
| Opgaven er en lettere useriøs leg med undermenuer. Da den er
tællerstyret bruges en for-løkke og to referencer: En til
den nuværende menu og en til den næste i række. Der
afsluttes med et JMenuItem.
|
|
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class MenuFrame extends JFrame {
public MenuFrame( String titel ) {
super( titel );
setJMenuBar( makeMenuBar() );
setDefaultCloseOperation( EXIT_ON_CLOSE );
setSize( 300, 100 );
setVisible( true );
}
private JMenuBar makeMenuBar() {
JMenuBar bar = new JMenuBar();
JMenu menu = new JMenu( "Base" );
bar.add( menu );
for ( int i=0; i<10; i++ ) {
JMenu nextMenu = new JMenu( "" + i );
menu.add( nextMenu );
menu = nextMenu;
}
menu.add( new JMenuItem( "The End" ) );
return bar;
}
} |
|
|
|