JRadioButtonの選択アイコンを除いたテキスト先頭をJLabelと揃える
Total: 844, Today: 1, Yesterday: 1
Posted by aterai at
Last-modified:
Summary
JRadioButtonやJCheckBoxの選択アイコンを除いたテキスト先頭が垂直配置したJLabelのテキスト先頭と揃うよう配置します。
Screenshot

Advertisement
Source Code Examples
JPanel p = new JPanel(new GridBagLayout());
p.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
p.setFocusTraversalPolicy(new ContainerOrderFocusTraversalPolicy());
p.setFocusTraversalPolicyProvider(true);
p.setFocusable(false);
// p.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
boolean leftToRightParent = p.getComponentOrientation().isLeftToRight();
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"));
int gap = 0;
for (JComponent c : list) {
// c.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
gbc.insets.left = 0;
gbc.insets.right = 0;
if (c instanceof JRadioButton) {
JRadioButton button = (JRadioButton) c;
if (gap == 0) {
gap = getIconSpace(button);
button.setSelected(true);
}
group.add(button);
} else if (c instanceof JLabel) {
boolean leftToRight = c.getComponentOrientation().isLeftToRight();
if (leftToRight && leftToRightParent) {
gbc.insets.left = gap;
} else if (leftToRight) {
gbc.insets.right = gap;
} else if (leftToRightParent) {
gbc.insets.right = gap;
} else {
gbc.insets.left = gap;
}
}
p.add(c, gbc);
}
gbc.gridx = 2;
gbc.weightx = 1.0;
gbc.insets.left = 5;
gbc.insets.right = 5;
list.forEach(c -> p.add(new JTextField(), gbc));
View in GitHub: Java, KotlinDescription
GridBagLayoutを使用してJRadioButton、JLabel、JCheckBoxを垂直配置JFileChooserの色選択パネル(javax.swing.colorchooser.ColorPanel)も同様にGridBagLayoutを使用して赤・緑・青用のJRadioButtonとアルファ用のJLabelを垂直配置している
UIManager.getIcon("RadioButton.icon")でJRadioButtonの選択アイコンを取得し、その幅とJRadioButtonの左余白、テキストと選択アイコンとの距離を記憶- 選択アイコンの存在しない
JLabelを親JPanelに追加する場合の制約GridBagConstraints#insets#leftに上記の値を代入してグリッドセルの左余白を設定し、各テキスト先頭が垂直に揃うよう配置JColorChooserの色選択パネルではGridBagConstraints#insets#leftではなくEmptyBorderを使用して左余白を設定しているComponentOrientationでGridBagLayoutのレイアウトやGridBagConstraints#insetsの左右が入れ替わることを回避するためか?
Reference
Comment
- 2023-12-11
JRadioButtonの選択アイコンを除いたテキスト先頭をJLabelと揃える
JRadioButtonやJCheckBoxの選択アイコンを除いたテキスト先頭が垂直配置したJLabelのテキスト先頭と揃うよう配置します。
JRadioButtonの選択アイコンを除いたテキスト先頭をJLabelと揃える
JRadioButtonの選択アイコンを除いたテキスト先頭をJLabelと揃える
JRadioButtonやJCheckBoxの選択アイコンを除いたテキスト先頭が垂直配置したJLabelのテキスト先頭と揃うよう配置します。