我写一个JTabbedPane,里面有4个子Panel,我在第一个子Panel里添加一个ImageIcon,当点其他的子Panel的时候图片没有被挡上,感觉是透到了其他的子Panel上,添加button就没有这个问题,这是为什么?怎么解决?

解决方案 »

  1.   

    ImageIcon不属于Component,不能添加到Panel,不知你是怎么添加上去的。
      

  2.   


    我知道,我把ImageIcon放到JLabel的。
      

  3.   

    public class MainInterFace extends JDialog {
    /**
     * 
     */
    public static UserConfig userConfig;
    private static final long serialVersionUID = 2361010088048362654L;
    private JButton workBtn;
    private JButton guestBtn;
    private JButton cancelBtn;
    private JButton cheerBtn;

    private JLabel title;
    private JLabel nameLbl;

    private JSeparator jSeparator;
    private JTabbedPane jTabbedPane;

    private JLabel workingImageLbl;
    private JLabel catchingImageLbl;
    private JPanel friendPanel;
    private JPanel fishPanel;
    private JPanel housePanel;
    private JPanel gardenPanel;

    private ImageIcon workingIcon;
    private ImageIcon catchingIcon;

    private static JTable deviceTable;
    private Dimension screenSize;

    public MainInterFace(){
    initializeComponents();
    }

    public void initializeComponents() {
    workBtn = new JButton("aaa");
    guestBtn = new JButton("bbb");
    cancelBtn = new JButton("ccc");
    cheerBtn = new JButton("ddd");
    title = new JLabel("title");
    nameLbl = new JLabel("name");
                    workingIcon = new ImageIcon("images/aaa.gif");
    catchingIcon = new ImageIcon("images/bbb.gif");
    workingImageLbl = new JLabel();
    catchingImageLbl = new JLabel();
    jSeparator = new JSeparator();
    jTabbedPane = new JTabbedPane();
    friendPanel = new JPanel();
    housePanel = new JPanel();
    fishPanel = new JPanel();
    gardenPanel = new JPanel();
    deviceTable = new JTable();
    screenSize = Toolkit.getDefaultToolkit().getScreenSize();

    this.setTitle("main");
    this.setSize(500, 400);
    this.setLocation(screenSize.width / 4, screenSize.height / 4);
    this.setResizable(false);
    this.setModal(true);
    this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

    this.getContentPane().setLayout(null);
    friendPanel.setLayout(null);
    fishPanel.setLayout(null);
    housePanel.setLayout(null);
    gardenPanel.setLayout(null);
    //Components of basic information 
    nameLbl.setBounds(22, 55, 79, 20);
    title.setBounds(165, 10, 200, 20);
    jSeparator.setBounds(20, 35, 455, 1);
    jTabbedPane.setBounds(20, 100, 455, 200);

    //Components of house panel
    workBtn.setBounds(70, 100, 80, 26);
    guestBtn.setBounds(300, 100, 80, 26);
    workingImageLbl.setIcon(workingIcon);
    workingImageLbl.setBounds(87, 40, 80, 60);
    catchingImageLbl.setIcon(catchingIcon);
    catchingImageLbl.setBounds(315, 40, 80, 60);
    housePanel.add(workingImageLbl);
    housePanel.add(catchingImageLbl);
    housePanel.add(workBtn);
    housePanel.add(guestBtn);

    //Components of friend panel
    cheerBtn.setBounds(70, 100, 80, 26);
    friendPanel.add(cheerBtn); deviceTable.setBackground(Color.white);
    deviceTable.setShowGrid(false);
    deviceTable.setShowVerticalLines(true);

    cancelBtn.setBounds(394, 320, 80, 26);

    jTabbedPane.add("  A  ",housePanel);
    jTabbedPane.add("  B  ",fishPanel);
    jTabbedPane.add("  C  ",gardenPanel);
    jTabbedPane.add("  D  ",friendPanel);

    cancelBtn.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                 cancelBtnActionPerformed(evt);
                }
            });

    workBtn.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                 workBtnActionPerformed(evt);
                }
            });

    guestBtn.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                 guestBtnActionPerformed(evt);
                }
            });

    this.add(cancelBtn);
    this.add(title);
    this.add(nameLbl);
    this.add(jSeparator);
    this.add(jTabbedPane);
    }

    /**
     * Perform action when user click cancelBtn
     * @param  evt : Action Event
     */
    private void cancelBtnActionPerformed(java.awt.event.ActionEvent evt) {
    this.dispose();
    }

    /**
     * Perform action when user click workBtn
     * @param  evt : Action Event
     */
    private void workBtnActionPerformed(java.awt.event.ActionEvent evt) {
    WorkTask wt = new WorkTask(userConfig);
    if(wt.execute() != null){
    showErrorMessage(wt.execute());
    }else{
    showErrorMessage(".....-_-!");
    }
    }

    /**
     * Perform action when user click guestBtn
     * @param  evt : Action Event
     */
    private void guestBtnActionPerformed(java.awt.event.ActionEvent evt) {
    BuyHouseTask bht = new BuyHouseTask(userConfig);
    if(bht.execute() != null){
    showErrorMessage(bht.execute());
    }else{
    showErrorMessage(".....-_-!");
    }
    }

    /**
     * display error message dialog
     * @param errorMessage : error message
     */
    private void showErrorMessage(String errorMessage) {
    JOptionPane.showMessageDialog(this, errorMessage, "Error",JOptionPane.YES_OPTION);
    }

    public static void main(String[] args) {
    try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) {
    }
    MainInterFace mif = new MainInterFace();
    mif.initializeComponents();
    mif.setVisible(true);
    }
    }
      

  4.   

    不要直接往JFrame里面添加组件。应该先getContentPane(),再往ContentPane中添加组件。或者先new一个JPanel,再setContentPane(panel)。
      

  5.   

    在我机器上跑没问题啊(Windows XP+JDK 1.6.10)
    为了能执行,注释掉不存在的类,代码如下:import java.awt.*;
    import javax.swing.*;public class MainInterFace extends JDialog {
    /**
    *
    */
    //public static UserConfig userConfig;
    private static final long serialVersionUID = 2361010088048362654L;
    private JButton workBtn;
    private JButton guestBtn;
    private JButton cancelBtn;
    private JButton cheerBtn;private JLabel title;
    private JLabel nameLbl;private JSeparator jSeparator;
    private JTabbedPane jTabbedPane;private JLabel workingImageLbl;
    private JLabel catchingImageLbl;
    private JPanel friendPanel;
    private JPanel fishPanel;
    private JPanel housePanel;
    private JPanel gardenPanel;private ImageIcon workingIcon;
    private ImageIcon catchingIcon;private static JTable deviceTable;
    private Dimension screenSize;public MainInterFace(){
    initializeComponents();
    }public void initializeComponents() {
    workBtn = new JButton("aaa");
    guestBtn = new JButton("bbb");
    cancelBtn = new JButton("ccc");
    cheerBtn = new JButton("ddd");
    title = new JLabel("title");
    nameLbl = new JLabel("name");
                    workingIcon = new ImageIcon("images/aaa.gif");
    catchingIcon = new ImageIcon("images/bbb.gif");
    workingImageLbl = new JLabel();
    catchingImageLbl = new JLabel();
    jSeparator = new JSeparator();
    jTabbedPane = new JTabbedPane();
    friendPanel = new JPanel();
    housePanel = new JPanel();
    fishPanel = new JPanel();
    gardenPanel = new JPanel();
    deviceTable = new JTable();
    screenSize = Toolkit.getDefaultToolkit().getScreenSize();this.setTitle("main");
    this.setSize(500, 400);
    this.setLocation(screenSize.width / 4, screenSize.height / 4);
    this.setResizable(false);
    this.setModal(true);
    this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);this.getContentPane().setLayout(null);
    friendPanel.setLayout(null);
    fishPanel.setLayout(null);
    housePanel.setLayout(null);
    gardenPanel.setLayout(null);
    //Components of basic information
    nameLbl.setBounds(22, 55, 79, 20);
    title.setBounds(165, 10, 200, 20);
    jSeparator.setBounds(20, 35, 455, 1);
    jTabbedPane.setBounds(20, 100, 455, 200);//Components of house panel
    workBtn.setBounds(70, 100, 80, 26);
    guestBtn.setBounds(300, 100, 80, 26);
    workingImageLbl.setIcon(workingIcon);
    workingImageLbl.setBounds(87, 40, 80, 60);
    catchingImageLbl.setIcon(catchingIcon);
    catchingImageLbl.setBounds(315, 40, 80, 60);
    housePanel.add(workingImageLbl);
    housePanel.add(catchingImageLbl);
    housePanel.add(workBtn);
    housePanel.add(guestBtn);//Components of friend panel
    cheerBtn.setBounds(70, 100, 80, 26);
    friendPanel.add(cheerBtn);deviceTable.setBackground(Color.white);
    deviceTable.setShowGrid(false);
    deviceTable.setShowVerticalLines(true);cancelBtn.setBounds(394, 320, 80, 26);jTabbedPane.add("  A  ",housePanel);
    jTabbedPane.add("  B  ",fishPanel);
    jTabbedPane.add("  C  ",gardenPanel);
    jTabbedPane.add("  D  ",friendPanel);cancelBtn.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelBtnActionPerformed(evt);
                }
            });workBtn.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                workBtnActionPerformed(evt);
                }
            });guestBtn.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                guestBtnActionPerformed(evt);
                }
            });this.add(cancelBtn);
    this.add(title);
    this.add(nameLbl);
    this.add(jSeparator);
    this.add(jTabbedPane);
    }/**
    * Perform action when user click cancelBtn
    * @param  evt : Action Event
    */
    private void cancelBtnActionPerformed(java.awt.event.ActionEvent evt) {
    this.dispose();
    }/**
    * Perform action when user click workBtn
    * @param  evt : Action Event
    */
    private void workBtnActionPerformed(java.awt.event.ActionEvent evt) {
    //WorkTask wt = new WorkTask(userConfig);
    //if(wt.execute() != null){
    //showErrorMessage(wt.execute());
    //}else{
    //showErrorMessage(".....-_-!");
    //}
    }/**
    * Perform action when user click guestBtn
    * @param  evt : Action Event
    */
    private void guestBtnActionPerformed(java.awt.event.ActionEvent evt) {
    //BuyHouseTask bht = new BuyHouseTask(userConfig);
    //if(bht.execute() != null){
    //showErrorMessage(bht.execute());
    //}else{
    //showErrorMessage(".....-_-!");
    //}
    }/**
    * display error message dialog
    * @param errorMessage : error message
    */
    private void showErrorMessage(String errorMessage) {
    JOptionPane.showMessageDialog(this, errorMessage, "Error",JOptionPane.YES_OPTION);
    }public static void main(String[] args) {
    try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) {
    }
    MainInterFace mif = new MainInterFace();
    mif.initializeComponents();
    mif.setVisible(true);
    }
    }
      

  6.   


    我发现,如果在第一个子panel里添加图片就有问题,在下层就没问题.........
      

  7.   

    没这个问题,直接添加没有毛病。
    你设置下窗口的布局试试,用cardlayout,把你的pane都添加到选项卡中