2014-09-18 3 views
0

Я сейчас разрабатываю проект Java. Добавляя JComboBox поверх прозрачного JPanel, я столкнулся с проблемой. Там отображается tfield(area) после нажатия на элемент JComboBox. Здесь я даю три части моего проекта.Как добавить JComboBox поверх прозрачной JPanel?

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

ответ

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); 
    } 
} 

Пожалуйста, попробуйте использовать описательные имена, это поможет тонне, когда другие должны проанализировать ваш код. Кроме того, старайтесь следовать логическому потоку и группировать похожие элементы вместе.

Единственное, что я заметил, это отсутствие управления макетами. Возможно, причиной вашего неполадки является отсутствие управления тем, где и как отображаются ваши товары. Попробуйте добавить и протестировать один компонент в то время, когда вы создаете графический интерфейс, пока не попадете в ситуацию.

EDIT:

Кажется, что единственное место, которое добавляется комбо бокс в checkPanel() метод, который запускается с помощью refreshMe() метода, который никогда не называется, чтобы добавить поле со списком.

Смежные вопросы