3

Java で JComboBox から境界線を削除する方法を知っていますか? 次のコードを試します

public class ComboFrame extends JFrame {
    public ComboFrame() {
        JPanel container = new JPanel();

        JComboBox cmb = new JComboBox(new String[] { "one", "two" });
        cmb.setBorder(BorderFactory.createEmptyBorder());
        container.add(cmb);

        getContentPane().add(container);
        pack();
    }
}

public static void main(String[] args) throws Exception {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            new ComboFrame().setVisible(true);
        }
    });
}

なぜ誰かがコンボボックスから境界線を削除したいのかと聞かないでください...あまり意味がないと思いますが、これが望まれる方法であり、それができるかどうか本当に興味がありました. いくつかのトリックを試しましたが、どれもうまくいきませんでした。

最も効果的だったのは、UI を変更することでした。

cmb.setUI(new BasicComboBoxUI());

これにより、境界線がなくなりますが、L&F が変更されます。可能であれば、Windows の L&F を維持する必要があります。

ありがとう。

4

2 に答える 2

5

私は少し調査を行い、このバグを見つけました

私は自分で試してみましたが、国境に影響を与えているようです。次のコード ブロックの 1 つまたは両方を試してみてください。

for (int i = 0; i < combo.getComponentCount(); i++) 
{
    if (combo.getComponent(i) instanceof JComponent) {
        ((JComponent) combo.getComponent(i)).setBorder(new EmptyBorder(0, 0,0,0));
    }


    if (combo.getComponent(i) instanceof AbstractButton) {
        ((AbstractButton) combo.getComponent(i)).setBorderPainted(false);
    }
}

バグ エントリの下部に、次の内容が記載されていることに注意してください。

JButton は独自の境界線を保持するため、JComponent のpaintBorder()およびpaintComponent()は JComboBox の境界線を認識しません。

幸運を、

ジーチ!

于 2009-04-22T15:34:58.127 に答える
0

Windows L&F を使用したい場合は、次のことができcmd.setUI(new WindowsComboBoxUI()); ます。ただし、任意の L&F を使用できるようにしたい場合は、Jeach によって提案されたソリューションを使用することをお勧めします。

于 2009-08-25T14:18:32.220 に答える