إزالة الحدود من jcombobox
سؤال
هل تعرف أي طريقة لإزالة الحدود من 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);
}
});
}
لا تسأل لماذا يرغب شخص ما في إزالة الحدود من كومبوبكس ... أعتقد أنه لا معنى كبير، لكن هذه هي الطريقة التي يريدها، وحصلت على فضولية حقا إذا كان يمكن القيام به. حاولت عدة حيل، لكن لا شيء منهم يعمل.
الأكثر فعالية كان تغيير واجهة المستخدم مع
cmb.setUI(new BasicComboBoxUI());
هذا يجعل الحدود يذهب بعيدا، ولكن يغير L & F، وأحتاج إلى الحفاظ على Windows L & F إذا كان ذلك ممكنا.
شكرا.
المحلول
لقد فعلت الكثير من البحث ووجدت هذا الخطأ
حاولت ذلك بنفسي ويبدو أنها تؤثر على الحدود. قد ترغب في تجربة واحدة أو كلي كتل التعليمات البرمجية التالية بنفسك.
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 paintorder () و PaintComponent () ليس لديه وعي حدود Jcombobox.
حظ سعيد،
من جديد
نصائح أخرى
إذا كنت ترغب في استخدام Windows L & F، فيمكنك القيام به cmd.setUI(new WindowsComboBoxUI());
ومع ذلك، فأنت تريد أن تكون قادرا على استخدام أي L & F، فقد تكون أفضل حالا باستخدام الحل الذي اقترحه Jeach.