如何在RadioButton上将图形和文本对齐到相对的两侧

huangapple go评论98阅读模式
英文:

How to align graphic and text to opposite sides on a RadioButton

问题

如何左对齐这些按钮的图标并右对齐文本(Java8)?

  1. <dependencies>
  2. <dependency>
  3. <groupId>de.jensd</groupId>
  4. <artifactId>fontawesomefx-materialdesignfont</artifactId>
  5. <version>1.7.22-4</version>
  6. <type>jar</type>
  7. </dependency>
  8. <dependency>
  9. <groupId>de.jensd</groupId>
  10. <artifactId>fontawesomefx-commons</artifactId>
  11. <version>8.15</version>
  12. </dependency>
  13. </dependencies>

应该更像这样:

  1. [![enter image description here][2]][2]
  1. import de.jensd.fx.glyphs.materialdesignicons.MaterialDesignIcon;
  2. import de.jensd.fx.glyphs.materialdesignicons.MaterialDesignIconView;
  3. import javafx.application.Application;
  4. import javafx.scene.Scene;
  5. import javafx.scene.control.RadioButton;
  6. import javafx.scene.control.ToggleGroup;
  7. import javafx.scene.layout.VBox;
  8. import javafx.stage.Stage;
  9. public class Main extends Application {
  10. public static void main(String[] args) {
  11. launch(args);
  12. }
  13. @Override
  14. public void start(Stage primaryStage) {
  15. primaryStage.setTitle("Hello World!");
  16. RadioButton memberButton = new RadioButton("Members");
  17. memberButton.setGraphic(new MaterialDesignIconView(MaterialDesignIcon.WORKER));
  18. RadioButton companyButton = new RadioButton("Companies");
  19. companyButton.setGraphic(new MaterialDesignIconView(MaterialDesignIcon.CITY));
  20. RadioButton settingsButton = new RadioButton("Settings");
  21. settingsButton.setGraphic(new MaterialDesignIconView(MaterialDesignIcon.WRENCH));
  22. stylizeAndSetButtons(memberButton, companyButton, settingsButton);
  23. VBox root = new VBox();
  24. root.getChildren().addAll(memberButton, companyButton, settingsButton);
  25. primaryStage.setScene(new Scene(root, 300, 250));
  26. primaryStage.show();
  27. }
  28. private static void stylizeAndSetButtons(RadioButton... buttons) {
  29. ToggleGroup group = new ToggleGroup();
  30. for (RadioButton button : buttons) {
  31. button.setPrefWidth(150);
  32. button.setMinHeight(50);
  33. button.getStyleClass().remove("radio-button");
  34. button.getStyleClass().add("toggle-button");
  35. button.getStyleClass().add("default");
  36. button.setToggleGroup(group);
  37. }
  38. }
  39. }
  1. <details>
  2. <summary>英文:</summary>
  3. How do I left align the icon graphic and right align the text of these buttons (Java8)?
  4. &lt;dependencies&gt;
  5. &lt;dependency&gt;
  6. &lt;groupId&gt;de.jensd&lt;/groupId&gt;
  7. &lt;artifactId&gt;fontawesomefx-materialdesignfont&lt;/artifactId&gt;
  8. &lt;version&gt;1.7.22-4&lt;/version&gt;
  9. &lt;type&gt;jar&lt;/type&gt;
  10. &lt;/dependency&gt;
  11. &lt;dependency&gt;
  12. &lt;groupId&gt;de.jensd&lt;/groupId&gt;
  13. &lt;artifactId&gt;fontawesomefx-commons&lt;/artifactId&gt;
  14. &lt;version&gt;8.15&lt;/version&gt;
  15. &lt;/dependency&gt;
  16. &lt;/dependencies&gt;
  17. [![enter image description here][1]][1]
  18. Should be more like this:
  19. [![enter image description here][2]][2]
  20. import de.jensd.fx.glyphs.materialdesignicons.MaterialDesignIcon;
  21. import de.jensd.fx.glyphs.materialdesignicons.MaterialDesignIconView;
  22. import javafx.application.Application;
  23. import javafx.scene.Scene;
  24. import javafx.scene.control.RadioButton;
  25. import javafx.scene.control.ToggleGroup;
  26. import javafx.scene.layout.VBox;
  27. import javafx.stage.Stage;
  28. public class Main extends Application
  29. {
  30. public static void main(String[] args)
  31. {
  32. launch(args);
  33. }
  34. @Override
  35. public void start(Stage primaryStage)
  36. {
  37. primaryStage.setTitle(&quot;Hello World!&quot;);
  38. RadioButton memberButton = new RadioButton(&quot;Members&quot;);
  39. memberButton.setGraphic(new MaterialDesignIconView(MaterialDesignIcon.WORKER));
  40. RadioButton companyButton = new RadioButton(&quot;Companies&quot;);
  41. companyButton.setGraphic(new MaterialDesignIconView(MaterialDesignIcon.CITY));
  42. RadioButton settingsButton = new RadioButton(&quot;Settings&quot;);
  43. settingsButton.setGraphic(new MaterialDesignIconView(MaterialDesignIcon.WRENCH));
  44. stylizeAndSetButtons(memberButton, companyButton, settingsButton);
  45. VBox root = new VBox();
  46. root.getChildren().addAll(memberButton, companyButton, settingsButton);
  47. primaryStage.setScene(new Scene(root, 300, 250));
  48. primaryStage.show();
  49. }
  50. private static void stylizeAndSetButtons(RadioButton... buttons)
  51. {
  52. ToggleGroup group = new ToggleGroup();
  53. for (RadioButton button : buttons)
  54. {
  55. button.setPrefWidth(150);
  56. button.setMinHeight(50);
  57. button.getStyleClass().remove(&quot;radio-button&quot;);
  58. button.getStyleClass().add(&quot;toggle-button&quot;);
  59. button.getStyleClass().add(&quot;default&quot;);
  60. button.setToggleGroup(group);
  61. }
  62. }
  63. }
  64. [1]: https://i.stack.imgur.com/vUMeE.png
  65. [2]: https://i.stack.imgur.com/SUrDz.png
  66. </details>
  67. # 答案1
  68. **得分**: 3
  69. 这是实现你想要的方法之一。
  70. 不要使用默认的 `Label`。使用一个包含你的图标、一个占位面板以及一个新的 `Label` 的 `HBox`。
  71. ```java
  72. import javafx.application.Application;
  73. import javafx.geometry.Pos;
  74. import javafx.scene.Scene;
  75. import javafx.scene.control.Label;
  76. import javafx.scene.control.RadioButton;
  77. import javafx.scene.control.ToggleGroup;
  78. import javafx.scene.layout.HBox;
  79. import javafx.scene.layout.Pane;
  80. import javafx.scene.layout.Priority;
  81. import javafx.scene.layout.VBox;
  82. import javafx.stage.Stage;
  83. import org.kordamp.ikonli.javafx.FontIcon;
  84. public class App extends Application {
  85. public static void main(String[] args) {
  86. launch(args);
  87. }
  88. @Override
  89. public void start(Stage primaryStage) {
  90. primaryStage.setTitle("Hello World!");
  91. RadioButton companyButton = new RadioButton();
  92. FontIcon icon = new FontIcon("bi-alarm");
  93. Pane placeHolder = new Pane();
  94. Label label = new Label("Company");
  95. placeHolder.setMaxWidth(Double.MAX_VALUE);
  96. HBox.setHgrow(placeHolder, Priority.ALWAYS);
  97. HBox hbox = new HBox(icon, placeHolder, label);
  98. hbox.setAlignment(Pos.CENTER);
  99. companyButton.setGraphic(hbox);
  100. stylizeAndSetButtons(companyButton);
  101. VBox root = new VBox();
  102. root.getChildren().addAll(companyButton);
  103. primaryStage.setScene(new Scene(root, 300, 250));
  104. primaryStage.show();
  105. }
  106. private static void stylizeAndSetButtons(RadioButton... buttons) {
  107. ToggleGroup group = new ToggleGroup();
  108. for (RadioButton button : buttons) {
  109. button.setPrefWidth(150);
  110. button.setMinHeight(50);
  111. button.getStyleClass().remove("radio-button");
  112. button.getStyleClass().add("toggle-button");
  113. button.getStyleClass().add("default");
  114. button.setToggleGroup(group);
  115. }
  116. }
  117. }

请注意,这里使用了 Ikonli,但思想应该是相同的。

模块信息:

  1. module sed.home.testonesimplefx {
  2. requires javafx.controls;
  3. requires org.kordamp.ikonli.core;
  4. requires org.kordamp.ikonli.javafx;
  5. requires org.kordamp.ikonli.bootstrapicons;
  6. exports sed.home.testonesimplefx;
  7. }

依赖项:

  1. <dependency>
  2. <groupId>org.kordamp.ikonli</groupId>
  3. <artifactId>ikonli-javafx</artifactId>
  4. <version>12.3.1</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.kordamp.ikonli</groupId>
  8. <artifactId>ikonli-bootstrapicons-pack</artifactId>
  9. <version>12.3.1</version>
  10. </dependency>

注意:这里使用了 Ikonli,但思想应该是相同的。

英文:

Here is one way to do what you want.

Don't use the default Label. Use an HBox with your icon, a spaceholder pane, and a new Label.


Main

  1. import javafx.application.Application;
  2. import javafx.geometry.Pos;
  3. import javafx.scene.Scene;
  4. import javafx.scene.control.Label;
  5. import javafx.scene.control.RadioButton;
  6. import javafx.scene.control.ToggleGroup;
  7. import javafx.scene.layout.HBox;
  8. import javafx.scene.layout.Pane;
  9. import javafx.scene.layout.Priority;
  10. import javafx.scene.layout.VBox;
  11. import javafx.stage.Stage;
  12. import org.kordamp.ikonli.javafx.FontIcon;
  13. public class App extends Application
  14. {
  15. public static void main(String[] args)
  16. {
  17. launch(args);
  18. }
  19. @Override
  20. public void start(Stage primaryStage)
  21. {
  22. primaryStage.setTitle(&quot;Hello World!&quot;);
  23. RadioButton companyButton = new RadioButton();
  24. FontIcon icon = new FontIcon(&quot;bi-alarm&quot;);
  25. Pane placeHolder = new Pane();
  26. Label label = new Label(&quot;Company&quot;);
  27. placeHolder.setMaxWidth(Double.MAX_VALUE);
  28. HBox.setHgrow(placeHolder, Priority.ALWAYS);
  29. HBox hbox = new HBox(icon, placeHolder, label);
  30. hbox.setAlignment(Pos.CENTER);
  31. companyButton.setGraphic(hbox);
  32. stylizeAndSetButtons( companyButton);
  33. VBox root = new VBox();
  34. root.getChildren().addAll( companyButton);
  35. primaryStage.setScene(new Scene(root, 300, 250));
  36. primaryStage.show();
  37. }
  38. private static void stylizeAndSetButtons(RadioButton... buttons)
  39. {
  40. ToggleGroup group = new ToggleGroup();
  41. for (RadioButton button : buttons)
  42. {
  43. button.setPrefWidth(150);
  44. button.setMinHeight(50);
  45. button.getStyleClass().remove(&quot;radio-button&quot;);
  46. button.getStyleClass().add(&quot;toggle-button&quot;);
  47. button.getStyleClass().add(&quot;default&quot;);
  48. button.setToggleGroup(group);
  49. }
  50. }
  51. }

Module-Info

  1. module sed.home.testonesimplefx {
  2. requires javafx.controls;
  3. requires org.kordamp.ikonli.core;
  4. requires org.kordamp.ikonli.javafx;
  5. requires org.kordamp.ikonli.bootstrapicons;
  6. exports sed.home.testonesimplefx;
  7. }

Dependencies

  1. &lt;dependency&gt;
  2. &lt;groupId&gt;org.kordamp.ikonli&lt;/groupId&gt;
  3. &lt;artifactId&gt;ikonli-javafx&lt;/artifactId&gt;
  4. &lt;version&gt;12.3.1&lt;/version&gt;
  5. &lt;/dependency&gt;
  6. &lt;dependency&gt;
  7. &lt;groupId&gt;org.kordamp.ikonli&lt;/groupId&gt;
  8. &lt;artifactId&gt;ikonli-bootstrapicons-pack&lt;/artifactId&gt;
  9. &lt;version&gt;12.3.1&lt;/version&gt;
  10. &lt;/dependency&gt;

Output

如何在RadioButton上将图形和文本对齐到相对的两侧

Note: This uses Ikonli but the ideas should be the same.

huangapple
  • 本文由 发表于 2023年7月13日 21:22:10
  • 转载请务必保留本文链接:https://go.coder-hub.com/76679849.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定