Menu
Coddy logo textTech

Button-Komponente

Teil des Abschnitts Objektorientierte Programmierung der Rust-Journey von Coddy. Lektion 51 von 61.

challenge icon

Aufgabe

Einfach

Fahren wir mit dem Aufbau unseres Dokumentensystems fort, indem wir eine zweite UI-Komponente hinzufügen: einen Button. Genau wie TextField wird diese Komponente das Draw-Trait implementieren und damit zeigen, wie verschiedene Typen eine gemeinsame Schnittstelle verwenden können.

Du erweiterst dein Projekt um eine weitere Moduldatei:

  • draw.rs: Behalte dein Draw-Trait aus den vorherigen Aufgaben bei.
  • text_field.rs: Behalte deine TextField-Struktur und deren Draw-Implementierung bei.
  • button.rs: Erstelle eine Button-Struktur mit zwei öffentlichen Feldern: label (ein String) und width (ein u32). Implementiere das Draw-Trait für Button, sodass der Aufruf von draw() die Schaltfläche in diesem Format ausgibt: Button: {label} (width: {width})
  • main.rs: Binde alle drei Module ein. Erstelle sowohl ein TextField als auch einen Button und rufe anschließend für jede Komponente draw() auf, um beide Komponenten darzustellen.

Dein button-Modul muss mithilfe von Draw auf das crate::draw::Draw-Trait zugreifen, genau wie du es bei TextField gemacht hast.

Die folgenden Eingaben werden bereitgestellt:

  • Erste Zeile: der Inhalt des Textfelds
  • Zweite Zeile: die Beschriftung der Schaltfläche
  • Dritte Zeile: die Breite der Schaltfläche (als Zahl)

Deine Ausgabe sollte zuerst das Textfeld und anschließend die Schaltfläche anzeigen, jeweils in einer eigenen Zeile:

Text: Welcome
Button: Submit (width: 100)
ERFORDERLICHES AUSGABEFORMAT: [Dein übersetzter Inhalt hier]

Probier es selbst

mod draw;
mod text_field;
mod button;

use draw::Draw;
use text_field::TextField;
use button::Button;

pub struct Label {
    pub text: String,
}

impl Draw for Label {
    fn draw(&self) {
        println!("{}", self.text);
    }
}

fn main() {
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let content = input1.trim().to_string();

    let mut input2 = String::new();
    std::io::stdin().read_line(&mut input2).expect("Failed to read line");
    let label = input2.trim().to_string();

    let mut input3 = String::new();
    std::io::stdin().read_line(&mut input3).expect("Failed to read line");
    let width: u32 = input3.trim().parse().expect("Failed to parse width");

    let text_field = TextField { content };
    text_field.draw();

    // TODO: Erstelle einen Button mit `label` und `width`, rufe dann draw() auf
    
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Rust-Compiler