Java-GUI筆記——JFrame類


1.JFrame類

1.1 JFrame類在javax.swing 包中——主要提供各種組件(窗口/按鈕/文本框),在Java中還提供了另外2個做GUI開發的包。

java.awt 包 – 主要提供字體/布局管理器,java.awt.event 包 – 事件處理,后台功能的實現。

 1.2頂層容器的概念(轉自:https://www.cnblogs.com/Angella/p/6058545.html

頂層容器值得是容納其他容器的容器組件,包括JFrame類,JWindows類,JDialog類,JApplet等。

Swing提供三個頂層容器類:JFrame,JDialog和JApplet。當使用這些容器類時,請謹記以下原則。

(1)要在屏幕上顯示,每個GUI組件必須是一個“容器層級”的一部分。

(2)每個GUI組件只能屬於一個容器,如果組件已經在一個容器當中,而又試圖將它添加到另一個容器當中去,那么應該從第一個容器中移除該組件,然后添加到兩一個容器去。

(3)各種可視化組件不直接放到頂層容器中去,而是放在容器的內容面板中。

(4)可以選擇添加一個菜單欄到頂層容器中,菜單欄應該按慣例位於頂層容器中,但必須位於內容面板之外。

(5)Swing中還有一個命名為JInternalFrame的內部窗體,它模仿JFrame,但實際上內部窗體並不是真正的頂層容器。

2.JFrame類使用

package Jframe;

import javax.swing.JFrame;

public class mainFrame extends JFrame {

    
    public mainFrame() {
    
        // 創建窗口
        JFrame frame = new JFrame();    
        //設置窗口標題
        this.setTitle("主窗體");
        //設置窗口的x,y位置,窗口大小x,y.
        this.setBounds(600, 300, 500, 400);
        //設置窗體的大小
        this.setSize(600, 600);
        //設置窗體的位置
        this.setLocation(600, 300);
        
        
        //設置默認的關閉窗口
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
    
    
    public static void main(String[] args) {
        mainFrame mainFrame = new mainFrame();
    }


}

注意:setDefaultCloseOperation有4種方法,裝在javax.swing.WindowConstants接口中。

1.DO_NOTHING_ON_CLOSE   什么都不做,直接關閉
2.DISPOSE_ON_CLOSE          :自動隱藏並釋放窗體
3.HIDE_ON_CLOSE                :隱藏窗口的默認關閉
4.EXIT_ON_CLOSE                :退出程序的默認窗口關閉

 

3.窗體默認在屏幕居中打開

在mainFrame 類中創建一個居中方法

//居中方法
    public void setFrameCenter()
    {
        //得到屏幕大小
        Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();        
        //得到x的位置
        int x = (dimension.width-this.getWidth())/2;
        //得到y的位置
        int y = (dimension.height-this.getHeight())/2;
         //設置窗口位置
         this.setLocation(x, y);
    }

然后在構造方法中加上即可

        //窗體居中
        this.setFrameCenter();

 4.設置窗體的背景

直接調用setBackground(Color color)方法無法設置顏色,JFrame上的contentPane默認是Color.WHITE的,創建一個contentPane,設置其顏色。

先說明下Jframe框架基本結構和繼承關系(轉自:https://blog.csdn.net/stanleyee/article/details/50615947

 

 

 窗口結構

 

 每一個頂級容器,都有一個隱藏的中間容器,叫做Root Pane。Root Pane 管理着Content Pane 、Menu Bar 和 其它一些容器。

 在mainFrame類中創建一個成員變量為容器對象,得到JFrame上面的內容窗格,組件需要放到內容窗格的上面,內容窗格再放到 JFrame 頂層容器的上面。

    //獲取當前窗口的內容窗格
    private Container container = this.getContentPane();

然后在構造函數中設置其顏色

        //窗體背景
        this.container.setBackground(new Color(234,23,33));

還有一種解決方案,為JFrame添加一個Panel或者JLabel等其他組件,設置其顏色為你想要的顏色,然后將其覆蓋JFrame窗口即可。

 5.代碼

package Jframe;

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class mainFrame extends JFrame {
    
    //創建容器對象
    private Container container = this.getContentPane();
    //創建ImagePanel
    private ImagePanel imagePanel;
    
    public mainFrame() {
    
        // 創建窗口
        JFrame frame = new JFrame();    
        //設置窗口標題
        this.setTitle("主窗體");
        //設置窗口的x,y位置,窗口大小x,y.
        this.setBounds(600, 300, 500, 400);
        //設置窗體的大小
        this.setSize(600, 600);
        //設置窗體的位置
        this.setLocation(600, 300);
        //窗體居中
        this.setFrameCenter();
        //窗體背景
        this.container.setBackground(new Color(234,23,33));
        //設置默認的關閉窗口
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
    
    
    //居中方法
    public void setFrameCenter()
    {
        //得到屏幕大小
        Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();        
        //得到x的位置
        int x = (dimension.width-this.getWidth())/2;
        //得到y的位置
        int y = (dimension.height-this.getHeight())/2;
         //設置窗口位置
         this.setLocation(x, y);
    }
    
    
    
    public static void main(String[] args) {
        mainFrame mainFrame = new mainFrame();
    }


}
View Code

6.運行效果

 

 

 

參考文章:

https://blog.csdn.net/qq_42035966/article/details/82258199

https://blog.csdn.net/xlh1991/article/details/16986555

https://blog.csdn.net/stanleyee/article/details/50615947

https://www.cnblogs.com/HDK2016/p/8435679.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM