2014-09-18 79 views
0

我目前正在開發一個Java項目。雖然通過透明JPanel添加JComboBox,但我遇到了問題。點擊JComboBox的元素後,會顯示tfield(area)。在這裏,我給出了我的項目的三個部分。如何通過透明JPanel添加JComboBox?

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.UIManager.LookAndFeelInfo; 
import javax.swing.plaf.nimbus.NimbusLookAndFeel; 

public class Test { 

    private static Panel1 p1 = new Panel1(); 
    // private static Panel2 p2 = new Panel2(); 
    // private static Panel3 p3 = new Panel3(); 

    private static int i; 
    private static JPanel pl1; 
    private static Image icon; 
    private static Ads panel; 

    public Test() 
    { 

     setLookAndFeel(); 

     JMenuBar m = new JMenuBar(); 
     JMenu about = new JMenu("About"); 


     JFrame f = new JFrame(); 
     f.setTitle("SUPERSHOP MANAGEMENT"); 
     f.setSize(900, 700); 
     f.setLayout(null); 
     icon = new ImageIcon("C:\\Users\\Montasir\\desktop\\12.jpg").getImage(); 
     panel = new Ads(icon); 
     f.add(panel); 
     pl1 = new JPanel(); 
     pl1.setBounds(0, 0, 900, 200); 
     pl1.setBackground(new Color(0, 0, 0, 0)); 

     JButton button1 = new JButton("ITEM"); 
     JButton button2 = new JButton("UPDATE"); 
     JButton button3 = new JButton("DAILY SALES"); 

     pl1.add(button1); 
     pl1.add(button2); 
     pl1.add(button3); 
     panel.add(pl1); 
     button1.setBackground(Color.CYAN); 
     button1.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) { 
       setI(1); 
       // refreshMe(); 
      } 
     }); 
     button2.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) { 
       setI(2); 
       //refreshMe(); 
      } 
     }); 
     button3.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       setI(3); 
       // refreshMe(); 
      } 
     }); 

     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     f.setVisible(true); 
     f.setResizable(false); 

    } 

    public static void setI(int j) { 
     i = j; 
    } 

    public static void refreshMe() { 

     checkPanel(); 

    } 
    public static void checkPanel() { 

     if (i == 1) { 
      panel.add(p1); 
      //panel.remove(p2); 
      // panel.remove(p3); 
      //panel.revalidate(); 
      // panel.repaint(); 
     } /*else if (i == 2) { 
      panel.add(p2); 
      panel.remove(p1); 
      panel.remove(p3); 
      panel.revalidate(); 
      panel.repaint(); 
     }else if (i == 3) { 
      panel.add(p3); 
      panel.remove(p1); 
      panel.remove(p2); 
      panel.revalidate(); 
      panel.repaint(); 
     }*/ 
    } 

     public static void main(String[] args) 
     {  
      new Test(); 
     } 

    public static void setLookAndFeel() 
    { 
     try 
     { 
      UIManager.setLookAndFeel(new NimbusLookAndFeel()); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 




class Panel1 extends JPanel{ 

    private JComboBox comb ; 

    private JButton b = new JButton("Add items"); 

    public Panel1() { 

     Test.setLookAndFeel(); 
     setLayout(new FlowLayout()); 
     this.setBackground(new Color(0,0,0,0)); 
     this.setBounds(0,200,900,500); 


     final String[]name={"Aziz","masum","sakib","shaon"}; 
     comb=new JComboBox(name); 
       this.setPreferredSize(new Dimension(900,600)); 


     this.add(comb); 

    } 


} 


class Ads extends JPanel { 

    private Image img; 

    public Ads(Image s) 
    { 
     this.img = s; 
     Dimension size = new Dimension(s.getWidth(null), s.getHeight(null)); 
     setPreferredSize(size); 
     setMinimumSize(size); 
     setMaximumSize(size); 
     setSize(size); 
     setLayout(null); 
    } 

    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     g.drawImage(img, 0, 0,null); 

    } 


} 
+0

看看'GlassPane' – Hungry 2014-09-18 16:20:15

回答

1

你的代碼很難遵循,所以我做了一個基本的例子。

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


public class TestBox extends JFrame{ 

    public static void main(String[] args) 
    { 
     new TestBox(); 
    } 


    public TestBox() 
    { 

     //comboBox creation 
     final String[] name = {"Aziz", "masum", "sakib", "shaon"}; 

     JComboBox comboBox=new JComboBox(name); 

     //transparent JPanel creation 
     JPanel mainPanel = new JPanel(new BorderLayout()); // transparent frame to add comboBox 
     mainPanel.add(comboBox, BorderLayout.NORTH); // comboBox added to transparent frame 

     //now dealing with the creation of the JFrame to display it all 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.setLocationRelativeTo(null); 
     this.setLayout(new BorderLayout()); 

     //adding everything to the frame 

     this.add(mainPanel, BorderLayout.CENTER); 
     this.pack(); 
     this.setVisible(true); 
    } 
} 

請儘量使用描述性的名稱,這將幫助噸,當別人需要分析你的代碼。另外,嘗試遵循邏輯流程並將相似的項目組合在一起。

我注意到的一件事是缺乏佈局管理。您可能無法管理您的項目在哪裏以及如何顯示,這是您遇到問題的原因。嘗試在構建GUI時一次添加和測試一個組件,直到您處於擺動狀態。

編輯:

看來,如果被添加您的組合框的唯一地方是在checkPanel()方法,這是由refreshMe()方法,這是從來沒有所謂的添加組合框觸發。