Java基礎入門 Swing中間容器的使用
Java基礎入門 Swing中間容器
在Swing中不僅有JFrame、JDialog這樣的頂級窗口,還擁有一些中間容器,這些容器不能單獨存在,必須依存在頂級窗口中。最常見的是JPanel、JScrollPane。
JPanel
:JPanel和AWT中的Panel組件使用方法基本一致,他是一個無邊框不能被放大、移動、關閉的面板,它的默認佈局管理器是FlowLayout,當然這是可以使用setLayout()方法重新設置的JScrollPane
:與JPanel不同的是,JScrollPane是一個帶有滾動條的面板容器而且這個面板隻能添加一個組件,如果想添加多個組件就必須先把多個組件添加到Panel中再將Panel添加到JScroollPane中
下面舉例說明一下JScrollPane的方法
方法聲明 | 功能描述 |
JScrollPane() | 創建一個空的JScrollPane面板 |
JScrollPane(Component view) | 創建一個顯示指定組件的JScrollPane面板,隻要組件大小超過面板大小就會出現水平和垂直滾動條 |
JScrollPane(Component view,int vsbPolicy,int hsbPoliy) | 創建一個顯示指定容器的JScrollPane面板 |
import java.awt.*; import javax.swing.*; public class Main extends JFrame{ public Main(){ this.setTitle("PanelDemo"); JScrollPane scrollPane=new JScrollPane(); //設置水平進度條需要時出現 scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); //設置垂直進度條一直出現 scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); JPanel panel=new JPanel(); panel.add(new JButton("按鈕1")); panel.add(new JButton("按鈕2")); panel.add(new JButton("按鈕3")); panel.add(new JButton("按鈕4")); for(int i=5;i<100;i++){ panel.add(new JButton("按鈕"+i)); } //將JPanel面板添加在滾動面板上顯示 scrollPane.setViewportView(panel); //將滾動面板添加到窗體的中部(CENTER) this.add(scrollPane,BorderLayout.CENTER); //創建窗體可關閉按鈕 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(400,250); this.setVisible(true); } public static void main(String[] args)throws Exception{ new Main(); } }
Java Swing頂層容器類
Swing擁有三個常用的頂層容器類
JFrame
JDialog
JApplet
1,任何畫面類,必須是容器類的分支,任何界面樹的頂層容器類必須是上面三個中的一個。
2,任何畫面組件隻能被容器類引用一次,如果復制他們到另外的容器類,它會被從第一個容器類中刪除然後放在第二個容器類中。
3,頂層容器類都含有一個內容面板,包含瞭頂層容器要顯示的內容
4,頂層容器類通常含有一個Menu Bar, 這個Menu Bar可以帶來更好的使用體驗,比如在Mac系統中,Menu bar會顯示在screen頂上而不是app頂上。
註意,JPanel默認的排版方式是FlowLayout
但是可以使用頂層容器類的setContentPanel替換成自定義佈局的JPanel類。
示例代碼:
package com.jesse.kotlin.com.jesse.gui import java.awt.BorderLayout import java.awt.Dimension import javax.swing.* class WindowMain { private val rootContainer = JFrame("GUI Demo") fun buildGui(){ rootContainer.defaultCloseOperation = JFrame.EXIT_ON_CLOSE var label = JLabel("Hello world") rootContainer.contentPane.add(label, BorderLayout.CENTER) rootContainer.preferredSize = Dimension(400, 300) var menuPanel:JMenuBar = JMenuBar() menuPanel.add(JMenu("help")) rootContainer.jMenuBar = menuPanel rootContainer.pack() rootContainer.isVisible = true } } fun main(args: Array<String>) { SwingUtilities.invokeLater { WindowMain().buildGui() } }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。