繁体   English   中英

带有2个标签的JTabbedPane未显示

[英]JTabbedPane with 2 tabs is not showing up

我正在创建一个程序,当一个人单击标签时,它将带您到第二个面板,该面板具有2个选项卡。 问题是,当我单击图像标签时,我只会看到空白的窗口,没有选项卡,也没有任何内容。

import java.awt.*;
import static java.awt.Font.BOLD;
import java.awt.event.*;
import java.awt.event.*;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.*;
import javax.swing.Timer;
import javax.swing.border.*;
import javax.swing.event.*;

public class hotels extends JFrame{

    JButton hotel;
    JLabel image;
    JTabbedPane tabbed,tabbed1;
    JPanel panel;
    JPanel panel1;
    Container pane;

    public hotels(){
        panel=new JPanel();
        panel.setBackground(Color.cyan);
        hotel=new JButton();
        hotel.setText("Hotels");

        Font myFont = new Font("Serif", Font.BOLD, 18);

        hotel.setFont(myFont);
        panel.setLayout(null);
        panel.add(hotel);

        hotel.setBounds(50, 80, 100, 40);

        image=new JLabel();

        image.setBounds(50,1,80,80);
        image.setBorder(BorderFactory.createLineBorder(Color.yellow));
        image.setBackground(Color.white);
        image.setIcon(new ImageIcon("2.gif"));
        panel.add(image);

        panel1=new JPanel();

        tabbed=new JTabbedPane();

        tabbed.add( "Round Trip",panel1);
        tabbed.add("One Way",panel1);
        panel1.setVisible(false);

        panel1.revalidate();
        panel.revalidate();
        panel1.repaint();
        panel.repaint();

        pane=getContentPane();
        pane.add(tabbed);
        pane.add(panel1);
        pane.add(panel);

        image.addMouseListener(new MouseAdapter() {

            public void mouseClicked(MouseEvent e){
                if (e.getSource()==image){
                    panel1.show();
                    panel.setVisible(false);
                    panel1.setVisible(true);
                    tabbed.setVisible(true);
                }
            }
        });

    }

    public static void main(String[] args) {

        hotels mw=new hotels();
        mw.setVisible(true);
        mw.setSize(400, 400);
    }

}
 pane.add(tabbed);
 pane.add(panel1);
 pane.add(panel);

上面的代码尝试向“内容”窗格添加3个子级-默认情况下,“内容”窗格具有BorderLayout ,其CENTER位置中不能包含多个组件-因此,最后添加的Component是将看到的Component。 您的选择是

  1. 使用CardLayout可以动态更改显示的面板
  2. 从适当的容器中删除所有项目,然后添加它们并重新验证/重新绘制

上面链接中1的示例。 2的示例(在MouseListener ):

pane.removeAll();
pane.add(tabbed);//presuming you want tabbed to show now
pane.revalidate();//or invalidate/validate for <1.7 JRE versions
pane.repaint();

存在一系列问题,包括使用null布局,这些问题将使您无休止地困扰着您...

 tabbed.add( "Round Trip",panel1);
 tabbed.add("One Way",panel1);

上面的代码将同一面板添加到两个不同的选项卡,但是由于组件只能有一个父项,因此它将自动删除“往返”选项卡

然后...

    pane=getContentPane();
    pane.add(tabbed);
    pane.add(panel1);
    pane.add(panel);

它会从选项卡式通道中删除所有选项卡(出于上述相同的原因),并且,根据您使用的布局管理器,可能仅显示panel

您无需更改由JTabbedPane管理的组件的可见性状态,因为它将为您处理所有这些工作

有关更多详细信息,请参见如何使用选项卡式窗格

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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