Swing/RadioButtonsLabelAlignment のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/RadioButtonsLabelAlignment へ行く。
- 1 (2023-12-11 (月) 00:17:54)
- 2 (2023-12-14 (木) 10:17:38)
- 3 (2024-01-01 (月) 12:30:54)
- category: swing folder: RadioButtonsLabelAlignment title: JRadioButtonの選択アイコンを除いたテキスト先頭をJLabelと揃える tags: [JRadioButton, JLabel, GridBagLayout] author: aterai pubdate: 2023-12-11T00:16:30+09:00 description: JRadioButtonやJCheckBoxの選択アイコンを除いたテキスト先頭が垂直配置したJLabelのテキスト先頭と揃うよう配置します。 image: https://drive.google.com/uc?id=1RKs4YswczAS_MAwgDe8zfp2Cwr_et1cS
概要
JRadioButtonやJCheckBoxの選択アイコンを除いたテキスト先頭が垂直配置したJLabelのテキスト先頭と揃うよう配置します。
Screenshot
Advertisement
サンプルコード
JPanel p = new JPanel(new GridBagLayout());
p.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
p.setFocusTraversalPolicy(new ContainerOrderFocusTraversalPolicy());
p.setFocusTraversalPolicyProvider(true);
p.setFocusable(false);
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 1;
gbc.insets.top = 5;
ButtonGroup group = new ButtonGroup();
List<JComponent> list = Arrays.asList(
new JRadioButton("JRadioButton1"),
new JRadioButton("JRadioButton2"),
new JRadioButton("JRadioButton3"),
new JLabel("JLabel1"),
new JLabel("JLabel2"),
new JCheckBox("JCheckBox1"),
new JCheckBox("JCheckBox2"));
Icon icon = UIManager.getIcon("RadioButton.icon");
int iconWidth = icon == null ? 0 : icon.getIconWidth();
int left = 0;
for (JComponent c : list) {
gbc.insets.left = 0;
if (c instanceof JRadioButton) {
JRadioButton button = (JRadioButton) c;
if (left == 0) {
button.setSelected(true);
Insets insets = button.getInsets();
left = insets.left + iconWidth + button.getIconTextGap();
}
group.add(button);
} else if (c instanceof JLabel) {
gbc.insets.left = left;
}
p.add(c, gbc);
}
gbc.gridx = 2;
gbc.weightx = 1.0;
gbc.insets.left = 5;
list.forEach(c -> p.add(new JTextField(), gbc));
View in GitHub: Java, Kotlin解説
GridBagLayout
を使用してJRadioButton
、JLabel
、JCheckBox
を垂直配置JFileChooser
の色選択パネル(javax.swing.colorchooser.ColorPanel
)も同様にGridBagLayout
を使用して赤・緑・青用のJRadioButton
とアルファ用のJLabel
を垂直配置している
UIManager.getIcon("RadioButton.icon")
でJRadioButton
の選択アイコンを取得し、その幅とJRadioButton
の左余白、テキストと選択アイコンとの距離を記憶- 選択アイコンの存在しない
JLabel
を親JPanel
に追加する場合の制約GridBagConstraints#insets#left
に上記の値を代入してグリッドセルの左余白を設定し、各テキスト先頭が垂直に揃うよう配置JFileChooser
の色選択パネルではGridBagConstraints#insets#left
ではなくEmptyBorder
を使用して左余白を設定している
参考リンク
コメント
- 2023-12-11
JRadioButtonの選択アイコンを除いたテキスト先頭をJLabelと揃える
JRadioButton
やJCheckBox
の選択アイコンを除いたテキスト先頭が垂直配置したJLabel
のテキスト先頭と揃うよう配置します。
JRadioButtonの選択アイコンを除いたテキスト先頭をJLabelと揃える
JRadioButtonの選択アイコンを除いたテキスト先頭をJLabelと揃える
JRadioButton
やJCheckBox
の選択アイコンを除いたテキスト先頭が垂直配置したJLabel
のテキスト先頭と揃うよう配置します。