伊莉討論區

標題: java GUI 怎樣做分頁 [打印本頁]

作者: 好開心    時間: 2012-11-19 10:14 AM     標題: java GUI 怎樣做分頁

提示: 作者被禁止或刪除 內容自動屏蔽
作者: 好開心    時間: 2012-11-20 01:03 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: 好開心    時間: 2012-11-26 10:39 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: kwj    時間: 2012-11-27 11:06 AM

好開心 發表於 2012-11-26 10:39 PM
public void Pane(){
        
        JTabbedPane tabbedPane = new JTabbedPane();

小弟把那個範例稍微改寫了一下,分成兩個檔案

TabbedPaneDemo.java
  1. package components;

  2. import javax.swing.JFrame;
  3. import javax.swing.SwingUtilities;
  4. import javax.swing.UIManager;
  5. import java.awt.BorderLayout;

  6. public class TabbedPaneDemo {

  7.   public static void main(String[] args) {
  8.     // Schedule a job for the event dispatch thread:
  9.     // creating and showing this application's GUI.
  10.     SwingUtilities.invokeLater(new Runnable() {
  11.       public void run() {
  12.         // Turn off metal's use of bold fonts
  13.         UIManager.put("swing.boldMetal", Boolean.FALSE);
  14.         // Create and set up the window.
  15.         JFrame frame = new JFrame("TabbedPaneDemo");
  16.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  17.         // Add content to the window.
  18.         frame.add(new TabbedPanel(), BorderLayout.CENTER);

  19.         // Display the window.
  20.         frame.pack();
  21.         frame.setVisible(true);
  22.       }
  23.     });
  24.   }
  25. }
複製代碼
TabbedPanel.java
  1. package components;

  2. import java.awt.GridLayout;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import java.awt.event.KeyEvent;

  6. import javax.swing.ImageIcon;
  7. import javax.swing.JButton;
  8. import javax.swing.JComponent;
  9. import javax.swing.JLabel;
  10. import javax.swing.JPanel;
  11. import javax.swing.JTabbedPane;

  12. public class TabbedPanel extends JPanel {
  13.   JTabbedPane tabbedPane = null;

  14.   public TabbedPanel() {
  15.     super(new GridLayout(1, 1));

  16.     tabbedPane = new JTabbedPane();
  17.     ImageIcon icon = null;

  18.     JComponent panel1 = makeTextPanel("Panel #1");
  19.     tabbedPane.addTab("Tab 1", icon, panel1, "Does nothing");
  20.     tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);

  21.     // Add the tabbed pane to this panel.
  22.     add(tabbedPane);

  23.     // The following line enables to use scrolling tabs.
  24.     tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
  25.   }

  26.   protected JComponent makeTextPanel(String text) {
  27.     JPanel panel = new JPanel(false);
  28.     JLabel filler = new JLabel(text);
  29.     filler.setHorizontalAlignment(JLabel.CENTER);
  30.     panel.setLayout(new GridLayout(1, 1));
  31.     panel.add(filler);

  32.     JButton b = new JButton("add");
  33.     // Set click listener to the button.
  34.     b.addActionListener(new ActionListener() {
  35.       @Override
  36.       public void actionPerformed(ActionEvent e) {
  37.         // Initial a new tab.
  38.         JComponent panel3 = makeTextPanel("Panel #99");
  39.         tabbedPane.addTab("Tab X", null, panel3, "Still does nothing");
  40.         tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);
  41.         // Add tab.
  42.         add(tabbedPane);
  43.       }
  44.     });
  45.     // Add button to tabbed panel.
  46.     panel.add(b);
  47.     return panel;
  48.   }
  49. }
複製代碼
其中重要的部分是小弟加在 makeTextPanel() 裡面的下面這段程式碼:
  1. JButton b = new JButton("add");
  2. // Set click listener to the button.
  3. b.addActionListener(new ActionListener() {
  4.   @Override
  5.   public void actionPerformed(ActionEvent e) {
  6.     // Initial a new tab.
  7.     JComponent panel3 = makeTextPanel("Panel #99");
  8.     tabbedPane.addTab("Tab X", null, panel3, "Still does nothing");
  9.     tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);
  10.     // Add tab.
  11.     add(tabbedPane);
  12.   }
  13. });
  14. // Add button to tabbed panel.
  15. panel.add(b);
複製代碼
這段程式碼是在 Tab 的 Panel 裡面多放一個按鈕,當按鈕被按下時會觸發 actionPerformed() 裡面的動作
也就是即時產生一個新的 Tab 出來。
作者: 好開心    時間: 2012-11-27 01:04 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: kwj    時間: 2012-11-27 03:17 PM

好開心 發表於 2012-11-27 01:04 PM
謝謝您, 不過我還有一些 基礎 不太 明白...

JComponent panel3 = makeTextPanel("Panel #99");
  1. JComponent panel3 = makeTextPanel("Panel #99");
  2. tabbedPane.addTab("Tab X", null, panel3, "Still does nothing");
  3. tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);
  4. // Add tab.
  5. add(tabbedPane);
複製代碼
這段行為中,makeTextPanel() 是在設定 Tab 內的東西
包括初始化一個 JPanel 用來顯示 Tab 內的東西,以及放 JLabel 上去顯示字串等等
這些都不見得是必要的~可以依據自己的需求去改變。

tabbedPane.addTab("Tab X", null, panel3, "Still does nothing"); 這段是必要的
這段是將前面產生的 JPanel 設定給新產生的 Tab
當然 panel3 這個參數可以自由決定~只要指定一個可以顯示在 Tab 底下的元件即可。

tabbedPane.setMnemonicAt(1, KeyEvent.VK_2); 這是要設定鍵盤快速鍵,非必要。

add(tabbedPane); 是將目前的 Tab Panel 整個加到目前的視窗中
根據文件說明,重複加入同一個元件,可以產生更新元件的效果~。
作者: 好開心    時間: 2012-11-30 02:02 PM

提示: 作者被禁止或刪除 內容自動屏蔽




歡迎光臨 伊莉討論區 (http://a401.file-static.com/) Powered by Discuz!