Swing/ComboBoxCellEditorInsets のバックアップの現在との差分(No.1)
TITLE:JTableのCellEditorに設定したJComboBoxに余白を追加する
Posted by aterai at 2012-05-07
JTableのCellEditorに設定したJComboBoxに余白を追加する
JTableのCellEditorに設定したJComboBoxに余白を追加します。- category: swing folder: ComboBoxCellEditorInsets title: JTableのCellEditorに設定したJComboBoxに余白を追加する tags: [JTable, TableCellEditor, TableCellRenderer, JComboBox, LayoutManager] author: aterai pubdate: 2012-05-07T12:28:04+09:00 description: JTableのCellEditorに設定したJComboBoxに余白を追加します。 image:
概要
JTable
のCellEditor
に設定したJComboBox
に余白を追加します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
サンプルコード
class ComboBoxPanel extends JPanel {
public final JComboBox comboBox = new JComboBox(new String[] {"aaaaaa", "bbb", "c"});
public final JComboBox<String> comboBox = new JComboBox<>(
new String[] {"aaaaaa", "bbb", "c"});
#spanadd
#spanend
public ComboBoxPanel() {
super(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
#spandel
#spanend
c.weightx = 1.0;
c.insets = new Insets(0, 10, 0, 10);
c.fill = GridBagConstraints.HORIZONTAL;
add(comboBox, c);
comboBox.setEditable(true);
comboBox.setSelectedIndex(0);
setOpaque(true);
add(comboBox, c);
comboBox.setSelectedIndex(0);
}
}
#spanadd
#spanend
#spanadd
class ComboBoxCellRenderer extends ComboBoxPanel implements TableCellRenderer {
#spanend
public ComboBoxCellRenderer() {
super();
setName("Table.cellRenderer");
}
#spanadd
#spanend
@Override public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
this.setBackground(isSelected ? table.getSelectionBackground()
: table.getBackground());
if (value != null) {
comboBox.setSelectedItem(value);
}
return this;
}
#spanadd
}
#spanend
View in GitHub: Java, Kotlin解説
- Border(左)
- JComboBox自身に余白を設定し、これをCellRenderer, CellEditorに使用
解説
-
Border
(左)-
JComboBox
自身に余白を設定し、これをCellRenderer
とCellEditor
に適用 - ドロップダウンリストの位置、サイズが余白を含んだ幅になる
#spanend #spanadd combo.setBorder(BorderFactory.createCompoundBorder( #spanend BorderFactory.createEmptyBorder(8, 10, 8, 10), combo.getBorder())); #spanadd
-
-
JPanel
+JComboBox
(右)-
GridBagLayout
を使用するJPanel
にJComboBox
を追加 -
fill
フィールドをGridBagConstraints.HORIZONTAL
として垂直方向にはJComboBox
のサイズを変更しない -
insets
フィールドを設定してJComboBox
の外側に別途(ドロップダウンリストの位置、サイズに影響しないように)余白を追加
-
- -
セルの中にある
JComboBox
の幅を可変ではなく固定にする場合は、以下のようなFlowLayout
のパネルにgetPreferredSize()
をオーバーライドして幅を固定したJComboBox
を使用する方法もあります。
#spandel
combo.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(8,10,8,10), combo.getBorder()));
#spanend
#spanadd
class ComboBoxPanel extends JPanel {
#spanend
private String[] m = new String[] {"a", "b", "c"};
protected JComboBox<String> comboBox = new JComboBox<String>(m) {
@Override public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
return new Dimension(40, d.height);
}
};
#spanadd
#spanend
public ComboBoxPanel() {
super();
setOpaque(true);
comboBox.setEditable(true);
add(comboBox);
}
#spanadd
}
#spanend
- JPanel+JComboBox(右)
- GridBagLayout を使用するJPanelにJComboBox を追加
- fill フィールドを GridBagConstraints.HORIZONTAL として、垂直にはJComboBox のサイズを変更しない
- insets フィールドを設定して、JComboBoxの外側に別途(ドロップダウンリストの位置、サイズに影響しないように)余白を追加