一、什麼是JFrame
JFrame是Java Swing組件庫中的一種窗口組件,它是AWT(Abstract Window Toolkit)的升級版,提供了更好的界面設計與交互體驗。它是Java編程中最常用的GUI(Graphical User Interface)工具之一,可以創建各種可視化窗口、對話框等,並且可以與其他Java Swing組件庫進行混合使用。
二、JFrame的創建及基本屬性
創建一個JFrame對象很簡單,只需要繼承JFrame類,然後實例化即可。以下是一個基本的JFrame創建代碼:
public class MyJFrame extends JFrame { public MyJFrame() { // 設置窗口標題 setTitle("My JFrame"); // 設置窗口大小 setSize(400, 400); // 設置窗口是否可以調整大小 setResizable(false); // 設置窗口關閉方式 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 設置窗口可見性 setVisible(true); } }
上面的代碼創建了一個名為「My JFrame」的窗口,大小為400×400,不可調整窗口大小,關閉窗口時會退出應用程序,現在我們來逐一解釋其中的一些屬性:
- setTitle(String title):設置窗口的標題。
- setSize(int width, int height):設置窗口的大小。
- setResizable(boolean resizable):設置窗口是否可以調整大小。
- setDefaultCloseOperation(int operation):設置窗口關閉方式,共有3種取值:JFrame.DO_NOTHING_ON_CLOSE(什麼也不做)、JFrame.HIDE_ON_CLOSE(隱藏窗口)和JFrame.EXIT_ON_CLOSE(退出應用程序)。
- setVisible(boolean visible):設置窗口是否可見。
三、JFrame的布局管理器
JFrame默認使用BorderLayout布局管理器,但是Swing提供了多種布局管理器供選擇:
- FlowLayout:從左至右、從上至下排列組件。
- BorderLayout:將容器分為5個區域:CENTER、NORTH、SOUTH、WEST和EAST,分別對應中央、上、下、左和右。
- GridLayout:將容器分為網格狀布局。
- CardLayout:卡片式布局,只顯示一個組件。
- GridBagLayout:用於實現複雜的屏幕布局,支持多行、多列和跨行跨列的組件布局。
以下是一個使用GridLayout的例子:
public class MyJFrame extends JFrame { public MyJFrame() { // 設置窗口標題 setTitle("My JFrame"); // 設置布局管理器 setLayout(new GridLayout(3, 3)); // 添加組件 for (int i = 1; i <= 9; i++) { add(new JButton("" + i)); } // 設置窗口是否可以調整大小 setResizable(false); // 設置窗口關閉方式 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 設置窗口可見性 setVisible(true); // 設置窗口大小 setSize(300, 300); } }
上面的代碼使用了GridLayout布局管理器,將容器分為3行3列的網格,並添加了9個按鈕組件。
四、JFrame的事件處理
在JFrame中,可以對各種事件進行監聽和處理,例如滑鼠點擊、鍵盤輸入等。以下是一個使用ActionListener監聽按鈕點擊事件的例子:
public class MyJFrame extends JFrame implements ActionListener { private JButton button; public MyJFrame() { // 設置窗口標題 setTitle("My JFrame"); // 設置布局管理器 setLayout(new FlowLayout(FlowLayout.CENTER)); // 創建按鈕組件 button = new JButton("Click Me"); // 添加按鈕事件監聽器 button.addActionListener(this); // 添加按鈕組件到窗口 add(button); // 設置窗口大小 setSize(300, 300); // 設置窗口是否可以調整大小 setResizable(false); // 設置窗口關閉方式 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 設置窗口可見性 setVisible(true); } @Override public void actionPerformed(ActionEvent e) { // 按鈕被點擊事件處理 JOptionPane.showMessageDialog(null, "Hello World"); } }
上面的代碼中,我們使用了ActionListener介面來監聽按鈕點擊事件,當按鈕被點擊時會彈出一條消息框,顯示「Hello World」。
五、JFrame的高級應用
JFrame不僅可以用來創建基本的窗口及交互組件,還可以與其他Java Swing組件庫一起使用,以實現更加複雜的應用場景。
例如,我們可以結合JPanel組件來實現多個窗口的布局,每個窗口都可以包含多個交互組件,以此來實現類似於「分頁瀏覽」的效果。
以下是一個使用JPanel和CardLayout的例子:
public class MyJFrame extends JFrame implements ActionListener { private JPanel cards; private JButton button1, button2, button3; private final String CARD1 = "Card 1"; private final String CARD2 = "Card 2"; private final String CARD3 = "Card 3"; public MyJFrame() { // 設置窗口標題 setTitle("My JFrame"); // 設置窗口大小 setSize(300, 300); // 設置窗口是否可以調整大小 setResizable(false); // 設置窗口關閉方式 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 創建卡片式布局的JPanel cards = new JPanel(new CardLayout()); // 創建第一個卡片 button1 = new JButton("Card 1"); button1.addActionListener(this); JPanel card1 = new JPanel(); card1.add(button1); // 創建第二個卡片 button2 = new JButton("Card 2"); button2.addActionListener(this); JPanel card2 = new JPanel(); card2.add(button2); // 創建第三個卡片 button3 = new JButton("Card 3"); button3.addActionListener(this); JPanel card3 = new JPanel(); card3.add(button3); // 將3個卡片添加到JPanel中 cards.add(card1, CARD1); cards.add(card2, CARD2); cards.add(card3, CARD3); // 將JPanel添加到窗口中 add(cards); // 設置窗口可見性 setVisible(true); } @Override public void actionPerformed(ActionEvent e) { // 根據按鈕點擊事件切換卡片 CardLayout cl = (CardLayout)(cards.getLayout()); if (e.getSource() == button1) { cl.show(cards, CARD1); } else if (e.getSource() == button2) { cl.show(cards, CARD2); } else if (e.getSource() == button3) { cl.show(cards, CARD3); } } }
上面的代碼創建了一個包含3個卡片的窗口,當點擊不同的按鈕時,會切換到對應的卡片。
六、總結
JFrame是Java編程中的全能工具,它提供了豐富的屬性、布局管理器和事件處理機制,可以用來創建各種可視化窗口並實現複雜的交互效果。同時,它還可以與其他Java Swing組件庫一起使用,以實現更加高級的應用程序。
原創文章,作者:RAGJM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/349397.html