Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Java - Je možné nastavit velikost textu s ohledem na jeho maximální šířku?

Dobrý den,

Pro znázornění jsem napsal tento kód

var rectangle = new Rectangle(100, 50);
        
var text = new Text("X");
text.setFont(Font.font(rectangle.getHeight()));

Mám obdélník a do něho chci vložit písmeno. Velikost písmena je definována výškou obdélníku. Avšak, chci brát ohled i na šířku. Šířka písmene je 1/4 jeho výšky. V tomhle případě je 100 / 4 <= 50, takže není problém.

Avšak, co když změním obdélník na

var rectangle = new Rectangle(100, 20);

V tom případě tam musím přídat podmínku, která změní velikost písmene podle jeho šířky.

if ((rectangle.getHeight() / 4) < rectangle.getWidth()) {
    text.setFont(Font.font(rectangle.getHeight() * 4));
}

Proto se chci zeptat, jestli je, prosím Vás, možné vypočítat velikost písmene s ohledem na maximální šířku a podmínky se zbavit?

Děkuji

PS. Ano, velikost textu se definuje v bodech a ne v pixelech, ale to bych teď ignoroval.

Předmět Autor Datum
Promiňte, napsal jsem to narychlo a podmínka je špatně. Takhle je správně. if ((rectangle.getHeight…
MichalDM 29.08.2020 07:28
MichalDM
Však to vypočítáš právě tou podmínkou. Co se ti na tom nezdá?
Wikan 29.08.2020 07:51
Wikan
Vždyť jsem to napsal, jestli jde vypočítat výšku textu s ohledem na šířku a podmínky se zbavit. Zají…
MichalDM 29.08.2020 10:01
MichalDM
Můžeš použít Math.max, ale na pozadí ta podmínka stejně bude.
Wikan 29.08.2020 10:25
Wikan
Chcete říct, že to nelze vypočítat nějakým výrazem? Zdá se mi to příliš jednoduché na to, aby to naš…
MichalDM 29.08.2020 12:30
MichalDM
Zkusil jsi ten Math.max?
Wikan 29.08.2020 13:24
Wikan
Ano, měl jste pravdu, ale musím použít Math.min, protože chci nastavit tu menší hodnotu. Jenže, ten…
MichalDM 29.08.2020 15:17
MichalDM
Chtěl jsi menší hodnotu. A 20 je méně než 4*100. Tak co se ti nezdá?
Wikan 29.08.2020 16:12
Wikan
Člověk je zblblý, že je šířka vždycky větší a pak to tak nastaví, i když nechtěl. Ano, parametry obd… poslední
MichalDM 29.08.2020 20:03
MichalDM

Promiňte, napsal jsem to narychlo a podmínka je špatně. Takhle je správně.

if ((rectangle.getHeight() / 4) > rectangle.getWidth()) {
    text.setFont(Font.font(rectangle.getWidth() * 4));
}

Opět připomínám, že fakt, že se velikost textu ve skutečnosti neuvádí v pixelech, teď ignoruji.

Ano, měl jste pravdu, ale musím použít Math.min, protože chci nastavit tu menší hodnotu.

Jenže, tenhle kód nefunguje, vždy vrátí 20.

var rectangle = new Rectangle(100, 20);

var text = new Text("X");
text.setFont(Font.font(Math.min(rectangle.getHeight(), rectangle.getWidth() * 4)));

System.out.println(text.getFont().getSize());

Pokud to změním na statické hodnoty, tak to pracuje správně. Jenže, nenapadlo mě to zkoušet a podmínka se chová úplně stejně.

V čem je, prosím Vás, problém?

Člověk je zblblý, že je šířka vždycky větší a pak to tak nastaví, i když nechtěl. Ano, parametry obdélníku jsou zadány obráceně.

var rectangle = new Rectangle(20, 100);
var text = new Text("X");

text.setFont(Font.font(Math.min(rectangle.getHeight(), rectangle.getWidth() * 4)));

Každopádně díky za tu metodu. Akorát to nebylo max, ale min.

Zpět do poradny Odpovědět na původní otázku Nahoru