NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Automatická velikost textu v Buttonu

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Vlastimil Juračka:7.1.2017 16:16

Ahoj mam dotaz. Ve svém programu bych potřeboval při zmenšení okna automatickou změnu velikosti písma v buttonu. Zkrátka aby se text vešel do buttonu i při jeho zmenšení... Díky moc za každou odpověď :)

 
Odpovědět
7.1.2017 16:16
Avatar
Odpovídá na Vlastimil Juračka
Vlastimil Juračka:7.1.2017 16:45

Zapoměl jsem úplně zmínit, že dělám v JavaFX a bylo by dobré kdyby to šlo udělat přes Scene Builder, ale určitě uvítam jakýkoli nápad :)

 
Nahoru Odpovědět
7.1.2017 16:45
Avatar
Odpovídá na Vlastimil Juračka
Petr Štechmüller:10.1.2017 10:39

Ahoj, ve SceneBuilderu tohle neuděláš. Po chvíli googlení a testování Ti můžu ukázat akorát ukázkový kód, zbytek už z toho musíš vykuchat sám.

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Main extends Application {

    private static DoubleProperty fontSize = new SimpleDoubleProperty(10);
    private static IntegerProperty blues = new SimpleIntegerProperty(50);

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button("Resizable color");
        Parent parent = new StackPane(btn);

        Scene scene = new Scene(parent);

        fontSize.bind(scene.widthProperty().add(scene.heightProperty()).divide(50));
        parent.styleProperty().bind(Bindings.concat("-fx-font-size: ", fontSize.asString(), ";"
            ,"-fx-base: rgb(100,100,",blues.asString(),");"));

        primaryStage.setScene(scene);
        primaryStage.setWidth(800);
        primaryStage.setHeight(600);
        primaryStage.show();
    }
}

Toto když zkompiluješ a spustíš, tak dostaneš aplikaci, ve které se bude zvětšovat/zmenšovat tlačítko podle velikosti okna.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
10.1.2017 10:39
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Vlastimil Juračka:10.1.2017 13:53

Jo díky moc nějak to zkusím :)

 
Nahoru Odpovědět
10.1.2017 13:53
Avatar
xxgregy479xx
Člen
Avatar
xxgregy479xx:17.2.2017 15:42

Ahoj

Nieco podobne som uz riesil, mozes sa inspirovat mojim (trosku nepeknym) kodom:

public void setDynamicSizedButtons() {
        anchorContentPane.getScene().getWindow().widthProperty().addListener(new ChangeListener<Number>() {
            @Override
            public void changed(ObservableValue<? extends Number> observableValue, Number oldSceneWidth, Number newSceneWidth) {
                if (((Double) newSceneWidth / 40) > 20 && ((Double) newSceneWidth / 40) < 40) {
                    squareBtns();
                    double fontSize = (((Double) newSceneWidth / 34));
                    double responsiveWidth = (((Double) newSceneWidth / 2.5));
                    String style = "-fx-font-size: " + fontSize + "px;" +
                            "-fx-pref-width: " + responsiveWidth + "px;";
                    tasks.get(0).getMenuButton().setStyle(style);
                    tasks.get(1).getMenuButton().setStyle(style);
                    tasks.get(2).getMenuButton().setStyle(style);
                    tasks.get(3).getMenuButton().setStyle(style);
                } else if (((Double) newSceneWidth / 40) < 20) {
                    verticalBtns();
                    String style = "-fx-font-size: " + 30 + "px;" +
                            "-fx-pref-height: " + 100 + "px;";
                    tasks.get(0).getMenuButton().setStyle(style);
                    tasks.get(1).getMenuButton().setStyle(style);
                    tasks.get(2).getMenuButton().setStyle(style);
                    tasks.get(3).getMenuButton().setStyle(style);
                }
            }
        });
    }
 
Nahoru Odpovědět
17.2.2017 15:42
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.