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]