2015-05-09 44 views
0

我正在創建一個程序,當一個人點擊標籤時,它會將您帶到第二個面板,該面板將有2個選項卡。問題是當我點擊圖片標籤時,我只看到空白窗口沒有標籤,也沒有任何標籤。帶有2個選項卡的JTabbedPane沒有顯示

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

} 

回答

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

上面的代碼試圖3個孩子添加到內容窗格的 - 默認內容窗格中具有BorderLayout,不能有超過1個部件,在它的CENTER位置 - 因此添加的最後一個組件是將會看到的組件。你的選擇是

  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(); 
+0

感謝更新我的代碼,但爲什麼我只看到第二個選項卡「單向」和不看另一個。 – rawal

+0

請參閱MadProgrammer的解答。 – copeg

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

+0

所以我必須使用卡布局。 – rawal

+0

什麼? JTabbedPane會自動切換視圖。 'panel'上的'null'佈局是什麼讓你困擾 – MadProgrammer

相關問題