Zwischenprüfung im Fach Java-GUI-Programmierung, Herbstsemester 2011 Dozent: Peter Füss Name: Klasse: 1. Aufgabe (2 Punkte): Welches Layout wird mit Sourcecode1 erzeugt? Bitte Zutreffendes ankreuzen! O O O 2. Aufgabe (3 Punkte): Folgendes Programm hat runde Buttons. In der Swing-Library gibt es zwar die Klasse JButton, welche aber keine Methode zur Verfügung stellt, um Buttons rund zu machen. Mit welchem objektorientiertem Mittel kann JButton für diesen Zweck trotzdem eingesetzt werden? Nennen Sie kurz die beiden wesentlichen Schritte für die Realisierung, schreiben Sie aber keinen Source-Code! Objektorientiertes Mittel: Vererbung 1.Schritt: neue Klasse (z.B. RoundButton) von JButton ableiten 2.Schritt: paint(Graphics g) überschreiben Name: Klasse: 3. Aufgabe (5 Punkte) Welche der folgenden Aussagen sind für Java richtig? Bitte die Richtigen ankreuzen! richtig - Eine Klasse kann nur eine direkte Basisklasse haben - Eine Klasse kann beliebig viele Interfaces implementieren - Alle Methoden in einer abstrakte Klasse müssen abstrakt sein - Ein Interface darf nur Konstanten und abstrakte Methoden enthalten - Von einer abstrakten Klasse können beliebig viele Objekte erzeugt werden. 4. Aufgabe (2 Punkte) O O O O O public class Report implements Printable { public void print() { public interface Printable { public void print(); } } } Schreiben Sie eine Klasse Report, welche nur das Nötigste enthält, damit ein Objekt dieser Klasse beim Aufruf folgender Methode übergeben werden kann: public void sendToPrinter(Printable p) 5. Aufgabe (4 Punkte) Ergänzen Sie Sourcecode 2 auf dem Zusatzblatt so, dass bei einem Click auf einen Button der jeweilige Buttontext im Display angezeigt wird! 6. Aufgabe (Zusatzaufgabe) (4 Punkte) Erweitern Sie das Programm aus Aufgabe 5 so, dass bei einem Buttonclick jeweils auch der entsprechende Label rot umrandet wird Hilfestellungen: einen Rahmen löscht man wie folgt: setBorder(null) Code um die Labels in labelPanel zu iterieren: for(Component label:labelPanel.getComponents()) { JLabel l=(JLabel)label; } //imports must not be done public class MainFrame extends JFrame //beginn of class MainFrame implements ActionListener { Container contentPane=this.getContentPane(); String bLabels="0123456789"; JTextField display; JPanel labelPanel; public MainFrame(String title) { super(title); this.setSize(320,220); this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); contentPane.setLayout(new BorderLayout()); contentPane.add(getNorthernPanel(),BorderLayout.NORTH); contentPane.add(getMainPanel(),BorderLayout.CENTER); } private JPanel getMainPanel() { JPanel p = new JPanel(); p.setLayout(new FlowLayout(FlowLayout.CENTER)); p.setFont(new Font("Arial",Font.BOLD,60)); for(int i=0;i<bLabels.length();i++) { JButton temp; p.add(temp=new JButton(""+bLabels.charAt(i))); temp.addActionListener(this); } p.setBorder(BorderFactory.createMatteBorder(5, 5, 5, 5, Color.gray)); return p; } private JPanel getNorthernPanel() { JPanel p=new JPanel(); labelPanel=new JPanel(); display=new JTextField("0"); for(int i=0;i<bLabels.length();i++) { labelPanel.add(new JLabel(""+bLabels.charAt(i))); } p.setLayout(new BorderLayout()); p.add(labelPanel,BorderLayout.NORTH); p.add(display,BorderLayout.SOUTH); display.setEditable(false); display.setHorizontalAlignment(JTextField.CENTER); display.setBackground(Color.white); display.setFont(new Font("Arial",Font.PLAIN,64)); p.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED)); return p; } public static void main(String[] args) { MainFrame mf= new MainFrame("Java Test"); mf.setVisible(true); } public void actionPerformed(ActionEvent e) { display.setText(e.getActionCommand()); //Aufgabe 5 for(Component label:labelPanel.getComponents()) { //Aufgabe 6 JLabel l=(JLabel)label; if(l.getText().equals(e.getActionCommand()) l.setBorder(BorderFactory.createLineBorder(Color.red); else l.setBorder(null); } }