Lösung Übung 14: Farb-Composer

Die Rot-, Grün- und Blauwerte können zwischen 0 und 255 verändert werden. Nach Drücken des Aktualisieren-Knopfs wird die neue Farbmischung angezeigt und es wird der Hexwert für die neue Farbe ausgegeben.

// Datei FarbComposer.java


import java.awt.*;
import java.applet.Applet;


public class FarbComposer extends Applet {


	protected TextField rotWert;
	protected TextField gruenWert;
	protected TextField blauWert;
		
	protected Label farbFeld;
	protected Label hexWert;
	
	/**
	*	GUI wird in dieser Funktion festgelegt und alle Felder werden
	*	initialisiert.
	*/	
	public void init() {

		setLayout( new BorderLayout() );
		
		Panel linksPanel = new Panel();
		
		linksPanel.setLayout( new BorderLayout() );
		
		farbFeld = new Label("");
		hexWert = new Label("");
		
		linksPanel.add( farbFeld, BorderLayout.CENTER);
		linksPanel.add( hexWert, BorderLayout.SOUTH );		
		
		Panel rechtsPanel = new Panel();
		
		rechtsPanel.setLayout( new GridLayout(7,1) );
		rotWert = new TextField("0");
		gruenWert = new TextField("0");
		blauWert = new TextField("0");

		Button updateButton = new Button("Aktualisieren");
		FarbComposerListener fcl = new FarbComposerListener(this);
		updateButton.addActionListener( fcl );
		
		rechtsPanel.add( new Label("Rotwert:") );
		rechtsPanel.add(rotWert);
		rechtsPanel.add( new Label("Grünwert:") );
		rechtsPanel.add(gruenWert);
		rechtsPanel.add( new Label("Blauwert:") );
		rechtsPanel.add(blauWert);
		rechtsPanel.add(updateButton);
		
		add( linksPanel, BorderLayout.CENTER );
		add( rechtsPanel, BorderLayout.EAST );
		
		setColorAndHexValue();
	}
	
	/**
	*	Ermittelt die aktuellen Werte und setzt alle Felder
	*/
	public void setColorAndHexValue() {
		
		try {			
			int r = Integer.parseInt( rotWert.getText() );
			int g = Integer.parseInt( gruenWert.getText() );
			int b = Integer.parseInt( blauWert.getText() );
		
			r = checkValue( r, rotWert );
			g = checkValue( g, gruenWert );
			b = checkValue( b, blauWert );
						
			// Setze Farbfeld neu
			farbFeld.setBackground( new Color(r,g,b) );	
			
			// Besorge Hex-Werte
			String red = Integer.toHexString(r).toUpperCase();
			String green = Integer.toHexString(g).toUpperCase();
			String blue = Integer.toHexString(b).toUpperCase();
			
			// Normalisiere Hex-Werte auf zwei Stellen
			if( red.length() < 2 ) red = "0"+ red;
			if( green.length() < 2 ) green = "0"+ green;
			if( blue.length() < 2 ) blue = "0"+ blue;
			
			// Setzte Hexwert neu
			hexWert.setText( "Hexwert: #"+ red + green + blue );
		}
		catch( NumberFormatException e ) {
			// ungueltiger Wert in mindestens einem Eingabefeld
			rotWert.setText("0");
			gruenWert.setText("0");
			blauWert.setText("0");
		}		
	}
	
	/**
	*	Check, ob die Grenzwerte o und 255 nicht ueberschritten sind
	*/
	private int checkValue( int wert, TextField quelle ) {
	
		if( wert < 0 || wert > 255 ) {
			if( wert < 0 ) wert = 0;
			if( wert > 255 ) wert = 255;
			
			quelle.setText( "" + wert );
		}
	
		return( wert );	
	}
	

}

// Datei FarbComposerListener.java
			

import java.awt.event.*;

public class FarbComposerListener implements ActionListener {
	
	private FarbComposer parent;
	
	public FarbComposerListener( FarbComposer p ) {
		parent = p; 
	}
	
	/**
	*	ActionListener-Funktion, wird aufgerufen, wenn der Update-Button
	*	gedrueckt wird.
	*/
	public void actionPerformed( ActionEvent e ) {
		parent.setColorAndHexValue();	
	}
}

																	    		
															
[Index]