我正在创建一个程序,当一个人点击标签时,它会带你到第二个面板,它将有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);
}
}
答案 0 :(得分:2)
pane.add(tabbed);
pane.add(panel1);
pane.add(panel);
上面的代码尝试将3个子项添加到“内容”窗格中 - 默认情况下,“内容”窗格具有BorderLayout
,其CENTER
位置的组件不能超过1个 - 因此添加了最后一个组件是将要看到的组件。你的选择是
以上链接中的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();
答案 1 :(得分:1)
存在一系列问题,包括使用null
布局,这会给你带来麻烦......
tabbed.add( "Round Trip",panel1);
tabbed.add("One Way",panel1);
上面的代码是将相同的面板添加到两个不同的选项卡,但由于一个组件只能有一个父级,它会自动删除“往返”选项卡
则...
pane=getContentPane();
pane.add(tabbed);
pane.add(panel1);
pane.add(panel);
从标签栏中移除所有标签(出于上述原因),并且根据您使用的布局管理器,可能只显示panel
您无需更改JTabbedPane
管理的组件的可见性状态,因为它会照顾您的所有内容
有关详细信息,请参阅How to Use Tabbed Panes