简体   繁体   中英

How can I add JComboBox over a Transparent JPanel?

I'm currently developing a Java project. While adding a JComboBox over a transparent JPanel , I have faced a problem. There shows a tfield(area) after clicking an element of the JComboBox . Here I give three portions of my project.

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

  }  


}  

Your code was rather difficult to follow so I did a basic example.

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

Please try to use descriptive names, it would help a ton when others have to analyze your code. Also, try to follow a logical flow and group similar items together.

One thing that I did notice was the lack of layout management. It is possible that your lack of managing where and how your items are displayed is the reason for your issues. Try adding and testing one component at a time when building a GUI until you get in the swing of things.

EDIT:

It seems as if the only place that your combo box is added is in the checkPanel() method, which is triggered by the refreshMe() method, which is never called to add the combo box.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM