隐藏其他组件(例如按钮标签等)的背景图片,反之亦然 [英] background image hidding the other components like buttons labels and other, and vicce versa

查看:39
本文介绍了隐藏其他组件(例如按钮标签等)的背景图片,反之亦然的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  1. 如何解决此代码中的组件隐藏问题
  2. 代码正在正常运行
  3. 但未显示背景图片
  4. 如何更改代码以获取背景图像
  5. 使用验证方法时,其在validate()中创建错误

  1. how to solve hidding of components in this code
  2. code is running without errors
  3. but background image not displayed
  4. how to change code to get the background image
  5. when using validation method, its creating error in validation()

   public class TEST{
    public TEST() {  
      String[] strm = {"Jan", "Feb", "Mar", "Apr", "May"};
       String[] stry = {"2016", "2017", "2018","2019"};
       String[] strf={"NEW Delhi", "Bangalore", "Chennai"};
       String[] strt={"Goa","Kashmir","Hyderabad"};
       JFrame f = new JFrame("test");
       f.setSize(500, 500);
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       JLabel lfr = new JLabel("FROM");
       JLabel lto = new JLabel("TO");
       JLabel lda = new JLabel("DATE");
       JLabel ld = new JLabel("DAY");
       JLabel lm = new JLabel("MONTH");
       JLabel y = new JLabel("YEAR");
       JComboBox cfr = new JComboBox(strf);
       JComboBox cto = new JComboBox(strt);
       JComboBox cd = new JComboBox();
       JComboBox cm = new JComboBox(strm);
       JComboBox cy = new JComboBox(stry);
       JButton bs = new JButton("Search");
       JPanel p1 = new JPanel(null);
       p1.setPreferredSize(new Dimension(500,500));
       JLabel jimage = new JLabel();
       jimage.setIcon(new ImageIcon("air.jpg"));


       for(int i = 1; i <= 31; i++)
           cd.addItem(i);
       lfr.setBounds(20, 40, 100, 20);
       cfr.setBounds(100, 40, 100, 20);
       lto.setBounds(20, 100, 25, 20);
       cto.setBounds(100, 100, 100, 20);
       lda.setBounds(20, 160, 50, 20);
       cd.setBounds(100, 160, 50, 20);
       cm.setBounds(160, 160, 65, 20);
       cy.setBounds(240, 160, 75, 20);
       ld.setBounds(100, 190, 50, 20);
       lm.setBounds(160, 190, 50, 20);
       y.setBounds(240, 190, 50, 20);
       bs.setBounds(20, 230, 100, 20);
       p1.add(lfr);
       p1.add(cfr);
       p1.add(lto);
       p1.add(cto);
       p1.add(lda);
       p1.add(cd);
       p1.add(cm);
       p1.add(cy);
       p1.add(ld);
       p1.add(lm);
       p1.add(y);
       p1.add(bs);
       p1.add(jimage);
      // validate();

       f.add(p1);

       f.setVisible(true);
    }

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

}

推荐答案

您能做的最好的事情是:

The best you can do is something like:

import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Test {
    JLabel label;
    JComboBox combo;
    JButton button;
    JPanel pane;
    JFrame frame;

    JPanel create1stRow() {
        JPanel pane = new JPanel();
        pane.setLayout(new FlowLayout(FlowLayout.LEFT));
        pane.setOpaque(false);
        String options[] = {"New Delhi", "Bangalore", "Chennai"};
        label = new JLabel("FROM");
        combo = new JComboBox(options);

        pane.add(label);
        pane.add(combo);
        return pane;
    }

    JPanel create2ndRow() {
        JPanel pane = new JPanel();
        pane.setLayout(new FlowLayout(FlowLayout.LEFT));
        pane.setOpaque(false);
        String options[] = {"Goa", "Kashmir", "Hyderabad"};
        label = new JLabel("TO");
        combo = new JComboBox(options);

        pane.add(label);
        pane.add(combo);
        return pane;
    }

    JPanel create3rdRow() {
        JPanel pane = new JPanel();
        JPanel dataPane = new JPanel();
        pane.setLayout(new FlowLayout(FlowLayout.LEFT));
        pane.setOpaque(false);
        dataPane.setOpaque(false); //forgot to add this line when I took the pic
        dataPane.setLayout(new GridLayout(2, 3)); //2 rows, 3 cols, so we can have the combos with their text aligned

        String days[] = {"1", "2", "3", "4", "5"}; //Too lazy to write 31 days
        String months[] = {"Jan", "Feb", "Mar", "Apr", "May"}; //Too lazy to write 12 months
        String years[] = {"2016", "2017", "2018", "2019", "2020"};
        label = new JLabel("DATE");
        combo = new JComboBox(days);

        //We add the combos
        dataPane.add(combo);
        combo = new JComboBox(months); //We're reusing the object, but change the data
        dataPane.add(combo);
        combo = new JComboBox(years); //The same as above
        dataPane.add(combo);

        //Now we add the labels
        dataPane.add(new JLabel("DAYS"));
        dataPane.add(new JLabel("MONTHS"));
        dataPane.add(new JLabel("YEARS"));

        pane.add(label);
        pane.add(dataPane); //We add the whole pane to another one
        return pane;
    }

    JPanel create4thRow() {
        JPanel pane = new JPanel();
        pane.setLayout(new FlowLayout(FlowLayout.LEFT));
        pane.setOpaque(false);
        button = new JButton("Search");

        pane.add(button);
        return pane;
    }

    public Test() {
        frame = new JFrame("Test");
        frame.setContentPane(new JLabel(new ImageIcon("C:/Users/Frakcool/workspace/StackOverflowProjects/src/test/Air.jpg")));
        frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.PAGE_AXIS));

        pane = create1stRow();
        frame.add(pane);
        pane = create2ndRow();
        frame.add(pane);
        pane = create3rdRow();
        frame.add(pane);
        pane = create4thRow();
        frame.add(pane);

        frame.pack();
        //frame.setSize(500, 500); //If your image is too large use this
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

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

如您在上面的代码中看到的,我没有使用null layout,而是多个

As you can see in the above code, I'm not using a null layout but a combination of multiple Layout Managers and I suggest you to do it like this in the future.

但是,如果您仍然想使用该丑陋的null布局,那么您将缺少以下行:

But if you still want to use that ugly null layout, you were missing this line:

jimage.setBounds(0, 0, 500, 500);

在此之前:

lfr.setBounds(20, 40, 100, 20);

我上面的代码给出的输出是:

The output that my above code gives is:

您的代码加上我添加的代码行给出的输出是:

And the output given by your code with the line I added is:

如您所见,两者确实非常相似,我本可以将它们做的完全相同,但是我没有足够的时间这样做,但是您可以结合上面发布的版式管理器.

As you can see, both are really similar, and I could have done them identical but I don't have enough time to do so, but you can by combining the Layout Managers I posted above.

注意:我忘了提到要使该程序显示背景图像,我需要使用pane.setOpaque(false);使其他所有面板都不透明,因此,请确保在需要时使用此面板来显示其他面板后面的内容.

Note: I forgot to mention that to make this program to show the background image, I needed to make every other panels not opaque with pane.setOpaque(false); so, be sure to use this whenever you need to show something that is behind another panel.

这篇关于隐藏其他组件(例如按钮标签等)的背景图片,反之亦然的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆