2014-06-17 10 views
6

görüntü işleme araçlarına sahiptir. Windows 7'de bir JComboBox kullandığımda, dört köşenin her biri ana bileşenin arka plan rengiyle uyuşmayan bir piksele sahiptir.Windows 7'deki JComboBox,

Windows 8'de bu sorun oluşmaz (bunun nedeni, Windows 8'de JComboBox'ın mükemmel bir dikdörtgen olması nedeniyle olabilir). OS X.

Bu, köşe piksellerini ana bileşenin arkaplan rengini kullanarak yapabilmek için ne yapabilirim?

İşte enter image description here

benim kullandığım bir müstakil kod örnek::

Burada sorunu gösteren bir görüntü var

import com.sun.java.swing.plaf.windows.WindowsLookAndFeel; 

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

public class Main { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(new WindowsLookAndFeel()); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

       JPanel contentPane = new JPanel(); 
       contentPane.setBackground(Color.WHITE); 

       JComboBox<String> comboBox = new JComboBox<String>(new String[]{"One", "Two"}); 
       contentPane.add(comboBox); 

       JFrame frame = new JFrame("JComboBox Test"); 
       frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
       frame.setContentPane(contentPane); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 
+0

Bu sorunu biliyorum ... ama normal olacağını düşündüm. belki de bileşenlerin tüm arka plan renklerini (birlikte gelen kutu) aynı renge ayarlamanız gerekir. – Rubinum

+0

'WindowsLookAndFeel''de ne' UIManager' [default] (http://stackoverflow.com/a/1197350/230513) denediniz? – trashgod

+1

@trashgod ne yazık ki bu Win7'de varsayılan, sadece Sınırları geçersiz kılmak için, Win Vista + Aero'nun ortak sorunu – mKorbel

cevap

3

... sınırı kaldırmayı deneyin

comboBox.setBorder(null); 

enter image description here

sonraki seçim özel bir görünüm tasarlamak ve Windows üzerinde ne istediğini elde temsilci ... Örneğin

hissetmek ...

public static class MyComboBoxUI extends WindowsComboBoxUI { 

    @Override 
    protected void installDefaults() { 
     super.installDefaults(); 
     LookAndFeel.uninstallBorder(comboBox); 
    } 

    public static ComponentUI createUI(JComponent c) { 
     return new MyComboBoxUI(); 
    } 

} 

Sonra kullanarak yüklemek olacaktır ... Bu size, cou

oluşturmak Yoksa her açılan kutudan sınırları kaldırmak gerekmez anlamına gelecektir

UIManager.put("ComboBoxUI", MyComboBoxUI.class.getName()); 

ld sadece ben denemek istiyorum

UIManager.put("ComboBox.border", new EmptyBorder(0, 0, 0, 0)); 
bunu uyguladıktan sonra

Her iki şekilde de oluşturulan tüm açılan kutuları etkileyecek ...

+0

UI özellik değiştirme ComboBox.border mükemmel çalıştı. Teşekkürler. –

-1

ilk şey setOpaque (yanlıştır ... UIManager varsayılan sınır özelliği geçersiz JComboBox'ta.

Ayrıca WindowLookAndFeel'i doğrudan ayarlamamalısınız. hep OS'nin varsayılan görünüm ayarlamak ve ne olursa olsun üzerinde çalışan şeyin OS arasında hissedeceksiniz

// force platform native look & feel 
try { 
    final String className = UIManager.getSystemLookAndFeelClassName(); 
    UIManager.setLookAndFeel(className); 
} catch (final Exception e) { 
    // ignore 
} 

: Yerine Sistem varsayılan L & F olarak ayarlayın.

+0

Bu önerilerin hiçbiri sorunu çözmez. –