0

こんにちは、

カスタムオブジェクトアイテムを追加するJComboBoxがあります。ただし、追加されたオブジェクトが空の場合もあります。したがって、comboBoxに空のアイテムが含まれていると、折りたたまれて非常に薄くなります。しかし、一度人口が増えると、通常の高さになります。アイテムが追加されていない場合や空のアイテムが追加されている場合でも、JComboBoxの高さを維持するためにsemethingを提案してもらえますか。

private final JComboBox comboField = new JComboBox(); comboField.removeAllItems(); comboField.addItem(getFirstConfig()); comboField.addItem(getSecConfig());

ありがとう

4

3 に答える 3

1

最小サイズを設定することでそれを行うことができますが、正しい値はフォントによって異なります。値を推測するか、のaddNotify助けを借りてから設定することができますFontMetrics

私は一般的に、最初の項目を「--Select Config--」のようにするか、選択する項目がないことがわかっている場合は「--No Configs Available--」のようにすると、簡単に実行できることがわかりました。

アップデート:

プレースホルダーは使用できないため、代わりの方法は、使用しているレイアウトマネージャーとLAFによって異なります。

ほとんどの場合、これはJComponentの最小サイズや優先サイズの設定に相当します。不正確ですが、私は通常GridBagLayout、このアプローチを使用して良い結果を出します。

    @Override
    public void addNotify() {
        super.addNotify();
        combo.setMinimumSize(atLeast(combo.getMinimumSize(), 100, 20));
        combo.setPreferredSize(atLeast(combo.getPreferredSize(), 100, 20));
    }

    private Dimension atLeast(Dimension d, int minWidth, int minHeight) {
        d.width = Math.max(minWidth, d.width);
        d.height = Math.max(minHeight, d.height);
        return d;
    }

100,20を自分に合った最小値に置き換えます。

于 2010-07-02T16:33:33.887 に答える
0

Jcomboboxのオプションがnullの場合、空の文字列""を追加するチェックを追加しました。これにより、ComboBoxが崩壊するのを防ぎます。

于 2010-07-07T11:15:46.617 に答える
0

ドロップダウンリストまたはボックス自体について話しているのですか。箱だけなら最低の高さを設定してみませんか?

更新:あなたのコメントに基づいて、私はそれでいくつかの実験をしました。使用しているレイアウトマネージャーによって、コンポーネントサイズの動作は異なります。これが機能する1つの方法は、以下に示すように、コンボボックスをフローレイアウトパネルでラップし、適切なサイズを設定することです。それでも問題が解決しない場合は、レイアウトマネージャーを教えてください。

コード(実行可能デモ):

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class JComboBoxTest {
    private static JComboBox combo;
    private static String[] labelStrs = new String[5];

    private static void createAndShowGUI() {
        final JFrame frame = new JFrame("test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        for (int i = 0; i < 5; i += 1) {
            labelStrs[i] = "I am label #" + i;
        }

        combo = new JComboBox(labelStrs);

        //------------------------------------------------
        combo.setPreferredSize(new Dimension(100, 20));
        //------------------------------------------------

        JButton remove = new JButton("remove");
        remove.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                combo.removeAllItems();
                frame.repaint();
            }
        });

        JButton add = new JButton("add");
        add.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                for (int i = 0; i < 5; i += 1) {
                    combo.addItem(labelStrs[i]);
                }
                frame.repaint();
            }
        });

        Panel container = new Panel();
        Panel wrapper = new Panel();
        Panel btns = new Panel();

        container.setLayout(new FlowLayout());
        container.add(combo);
        wrapper.add(container); 
        btns.add(remove);
        btns.add(add);

        frame.getContentPane().setLayout(new BorderLayout());
        frame.getContentPane().add(wrapper, BorderLayout.CENTER);
        frame.getContentPane().add(btns, BorderLayout.SOUTH);

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }   
}
于 2010-07-02T15:55:45.393 に答える