2012-12-18 39 views
1

我有使JComboBox透明的问题。我试图设置不透明为背景0的错误和alpha,但它不起作用。我想,我需要改变一些的类,它呈现什么similar.And这里是代码..使JComboBox透明

import java.awt.EventQueue; 
    import java.awt.Graphics; 
    import java.awt.Rectangle; 

    import javax.swing.JFrame; 
    import javax.swing.JComboBox; 
    import javax.swing.JTextField; 
    import javax.swing.plaf.basic.BasicComboBoxUI; 

    import java.awt.Color; 


public class App { 

private JFrame frame; 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       App window = new App(); 
       window.frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

public App() { 
    initialize(); 
} 

private void initialize() { 
    frame = new JFrame(); 
    frame.getContentPane().setBackground(Color.GREEN); 
    frame.setBounds(100, 100, 450, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(null); 

    String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" }; 
    JComboBox comboBox = new JComboBox(petStrings); 
    comboBox.setBounds(149, 99, 155, 20); 
    comboBox.setOpaque(false); 
    //comboBox.setBackground(new Color(0,0,0,0)); 
    ((JTextField)comboBox.getEditor().getEditorComponent()).setOpaque(false); 
    comboBox.setUI(new BasicComboBoxUI(){ 

     public void paintCurrentValueBackground(Graphics g,Rectangle bounds,boolean hasFocus){}}); 
    frame.getContentPane().add(comboBox); 

} 

} 
+0

你能告诉我们哪里是问题在你的身边,为更好地帮助更快张贴[SSCCE(http://sscce.org/),短,可运行,可编译,只是约JFrame和JComboBox – mKorbel

+0

检查这[后](http://www.pushing-pixels.org/2008/02/27/translucent-and-shaped-windows-in-core-java.html )出来。 – bonCodigo

+1

@bonCodigo - 您提到的帖子是关于创建造型和半透明的窗户。不要认为它适用于JComboBox。 – sreejit

回答

0

您需要预先设置这几件事情

jcombo.setOpaque(false); 
jcombo.setContentAreaFilled(false); 
jcombo.setBorderPainted(false); 
+0

setContentAreaFilled()甚至可用于JComboBox? – sreejit

+0

不,setContentAreaFilled()不可用 – user1610362

2

假设你只是想组合框的文本字段透明(不是弹出窗口),使用下面的代码应该可以工作。您需要混淆ComboBox渲染器而不是编辑器。编辑器用于输入组合框;如果ComboBox只是一个值列表,则使用渲染器。

comboBox.setOpaque(false); 
comboBox.setRenderer(new DefaultListCellRenderer(){ 
    @Override 
    public Component getListCellRendererComponent(JList list, Object value, 
      int index, boolean isSelected, boolean cellHasFocus) { 
     JComponent result = (JComponent)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); 
     result.setOpaque(false); 
     return result; 
    }}); 
+0

为了理解为什么setOpaque技巧不适用于Nimbus L&F,请参阅:http://stackoverflow.com/questions/2451990/setopaquetrue-false-java – lbalazscs

+0

我如何删除边框?我试过comboBox.setBorder(null);和comboBox.setBorder(new EmptyBorder(0,0,0,0));但它不起作用。 – user1610362

+0

该解决方案不适用于Windows样式JComboBox,UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());! – user1610362

0

试试这个。

yourComboBox.setOpaque(false); 
((JTextField)yourComboBox.getEditor().getEditorComponent()).setOpaque(false); 

setUI(new BasicComboBoxUI() { 

    @Override  
    public void paintCurrentValueBackground(
     Graphics g, Rectangle bounds, boolean hasFocus) { 

    } 
}); 
0
JComboBox myComboBox = new JComboBox(array); 
myComboBox .setOpaque(false); 
myComboBox .setEditable(true); 
JTextField boxField = (JTextField)myComboBox .getEditor().getEditorComponent(); 
boxField.setBorder(BorderFactory.createEmptyBorder()); 
boxField.setBackground(new Color(0, 0, 0, 0)); 
boxField.setFocusable(false); 

答案是http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6687960