核心Swing組件(七) – JAVA編程語言程序開發技術文章

最後一個基本的Swing組件是JPanel組件。JPanel組件可以作為一個通常目的的窗口對象,替換瞭AWT的Panel窗口,而當我們需要一個可繪制的Swing組件區域時,JPanel替換瞭Canvas組件。


4.7.1 創建JPanel
JPanel有四個構造函數:


public JPanel()
JPanel panel = new JPanel();
 
public JPanel(boolean isDoubleBuffered)
JPanel panel = new JPanel(false);
 
public JPanel(LayoutManager manager)
JPanel panel = new JPanel(new GridLayout(2,2));
 
public JPanel(LayoutManager manager, boolean isDoubleBuffered)
JPanel panel = new JPanel(new GridLayout(2,2), false);使用這些構造函數,我們可以修改FlowLayout中的默認佈局管理器,或是通過執行true或false修改默認的雙緩沖。


4.7.2 使用JPanel
我們可以將JPanel用我們通常目的的容器,或者是用作新組件的基類。對於通常目的容器,其過程很簡單:創建面析,如果需要設置其佈局管理器,並且使用add()方法添加組件。


JPanel panel = new JPanel();
JButton okButton = new JButton(“OK”);
panel.add(okButton);
JButton cancelButton = new JButton(“Cancel”);
panel.add(cancelButton);當我們需要創建一個新的組件時,派生JPanel並且重寫public void paintComponent(Graphics g)方法。盡管我們可以直接派生JComponent,但派生JPanel修改更為合理。列表4-8演示瞭一個組件繪制適應組件尺寸的橢圓的簡單組件,同時包含一個測試驅動。


package swingstudy.ch04;
 
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.GridLayout;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
 
public class OvalPanel extends JPanel {
 
 Color color;
 
 public OvalPanel() {
  this(Color.black);
 }
 
 public OvalPanel(Color color) {
  this.color = color;
 }
 
 public void paintComponent(Graphics g) {
  int width = getWidth();
  int height = getHeight();
  g.setColor(color);
  g.drawOval(0, 0, width, height);
 }
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
 
  Runnable runner = new Runnable() {
   public void run() {
    JFrame frame = new JFrame(“Oval Sample”);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
    frame.setLayout(new GridLayout(2,2));
 
    Color colors[] = {Color.RED, Color.BLUE, Color.GREEN, Color.YELLOW };
 
    for (int i=0;i<4;i++) {
     OvalPanel panel = new OvalPanel(colors[i]);
     frame.add(panel);
    }
 
    frame.setSize(300, 200);
    frame.setVisible(true);
   }
  };
 
  EventQueue.invokeLater(runner);
 }
 
}圖4-15顯示瞭測試驅動的運行結果。


 


4.7.3 自定義JPanel觀感
表4-16顯示瞭JPanelUIResource相關的屬性集合。對於JPanel組件,有五個不同的屬性。這些設置也許會影響到面板內的組件。


JPanel UIResource元素


屬性字符串
 對象類型
 
Panel.background
 Color
 
Panel.border
 Border
 
Panel.font
 Font
 
Panel.foreground
 Color
 
PanelUI
 String
 


4.8 小結
在本章中,我們探討瞭所有Swing組件的基類:JComponent類。由討論我們瞭解瞭所有組件的共同元素,例如工具提示,以及特定的組件,例如JLabel。同時我們瞭解瞭如何使用Icon接口以及ImageIcon類為組件添加圖標,而GrayFilter圖像過濾器用於禁止圖標。


我們同時瞭解瞭AbstractButton組件,他是所有Swing按鈕對象的根對象。我們瞭解瞭其數據模型接口,ButtonModel,以及這個接口的默認實現,DefalutButtonModel。接著,我們瞭解瞭JButton類,他是最簡單的AbstractButton實現。最後,我們瞭解瞭作為基本Swing容器對象的JPanel。


在第5章中,我們將會深入一些復雜的AbstractButton實現:轉換按鈕

發佈留言