一、什麼是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-hant/n/349397.html
微信掃一掃
支付寶掃一掃