熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java GUI中布局管理器的使用

2013-11-23 19:17:18  來源: Java核心技術 

  很多初學者在用Java布局器自動布局畫界面時經常遇見不知道如何定義區域大小或按鈕之間的距離等問題我寫過一篇《實現JAVA手動布局中各個組件能隨窗口變化的方法》的文章有讀者反映算坐標不好算問能不能用布局器實現文章中的界面其實自動布局也可以解決定義區域大小或按鈕之間的距離等問題只是沒有手動布局那麼靈活下面我就舉一個例子
   
    首先建一個frame文件(Application應用程序)在Design中將this中的layout設置為BorderLayout
   
    第二在組件盤內點選Swing Container頁簽選取Jpanel圖標在this中上方拖拽一塊區域布局器會自動調整位置與大小同樣的方法在中下方也拖拽一塊區域在Swing Container頁簽選取jScrollPane圖標將jScrollPane在中間拖拽一塊區域拖拽的順序一定要先上後下再中間為了方便區分在Properties的background中將上方的Jpanel區域設置為紅色下方的Jpanel區域設置為橙色中間的jScrollPane為粉紅色將Jpanel和Jpanel的layout設置為flowLayout(必須要手動設置不要采用默認值)
   
    第三在Jpanel中放入一個Jlable標題欄JTextField文本框和Jbutton按鈕在組件盤內點選Swing 頁簽選取JLable圖標在Jpanel的中畫一個標題欄將text改為請輸入查詢條件再選取JtextField在Jpanel中畫一個文本框將text改為空最後選取Jbutton在Jpanel中再畫一個按鈕將text改為查詢畫完後他們都是在中間而且大小固定這時點選Jpanel的flowLayout將右邊Properties中的alignment設置為LEFT這時Jpanel中的組鍵就會向左排列選中其中一個組鍵在Properties中的preferredSize可以設置組鍵的寬和高同樣的方法在Jpanel中畫三個Jbutton按鈕將text分別設為增加刪除修改點選Jpane的flowLayout將右邊Properties中的hgap設置為(按鈕的間距可根據自己的需要調整數值大小) 這樣就調整了三個按鈕之間的距離設置vgap還可以改變Jpane區域的高度
   
    第四在jScrollPane中建一個表格用來顯示數據庫數據的內容在組件盤內點選Swing 頁簽選取JTable圖標將Jtable加入到jScrollPane
   
    最後將this中的defaultCloseOperation改為EXIT_ON_CLOSE這樣在關閉窗口時程序會自動退出
   
    程序源代碼如下(除中文注釋部分的兩句是自己加上去其余是自動生成)
   
    import javaxswing*;
   
    import javaawt*;
   
    import javaawtevent*;
   
    import javautilVector;
   
    import javaxswingtableDefaultTableModel;
   
    public class Frame
   
    extends JFrame {
   
    BorderLayout borderLayout = new BorderLayout()
   
    JPanel jPanel = new JPanel()
   
    JPanel jPanel = new JPanel()
   
    JPanel jPanel = new JPanel()
   
    JLabel jLabel = new JLabel()
   
    JTextField jTextField = new JTextField()
   
    JButton jButton = new JButton()
   
    FlowLayout flowLayout = new FlowLayout()
   
    FlowLayout flowLayout = new FlowLayout()
   
    JButton jButton = new JButton()
   
    JButton jButton = new JButton()
   
    JButton jButton = new JButton()
   
    GridLayout gridLayout = new GridLayout()
   
    JScrollPane jScrollPane = new JScrollPane()
   
    JTable jTable = new JTable()
   
    public Frame() {
   
    try {
   
    jbInit()
   
    }
   
    catch (Exception e) {
   
    eprintStackTrace()
   
    }
   
    }
   
    public static void main(String[] args) {
   
    Frame frame = new Frame()
   
    framesetSize(new Dimension( ))
   
    frameshow()
   
    }
   
    private void jbInit() throws Exception {
   
    thisgetContentPane()setLayout(borderLayout
   
    jPanelsetBackground(Colorred)
   
    jPanelsetLayout(flowLayout
   
    jPanelsetBackground(Colorred)
   
    jPanelsetLayout(flowLayout
   
    jPanelsetBackground(Colorpink)
   
    jPanelsetLayout(gridLayout
   
    jLabelsetPreferredSize(new Dimension( ))
   
    jLabelsetText(請輸入查詢條件
   
    jTextFieldsetPreferredSize(new Dimension( ))
   
    jTextFieldsetText(
   
    jButtonsetText(查詢
   
    jButtonaddActionListener(new Frame_jButton_actionAdapter(this))
   
    flowLayoutsetAlignment(FlowLayoutLEFT)
   
    flowLayoutsetHgap(
   
    flowLayoutsetVgap(
   
    jButtonsetText(增加
   
    jButtonsetText(刪除
   
    jButtonsetText(修改
   
    flowLayoutsetHgap(
   
    flowLayoutsetVgap(
   
    thissetDefaultCloseOperation(EXIT_ON_CLOSE)
   
    thisgetContentPane()add(jPanel BorderLayoutNORTH)
   
    jPaneladd(jLabel null)
   
    jPaneladd(jTextField null)
   
    jPaneladd(jButton null)
   
    thisgetContentPane()add(jPanel BorderLayoutSOUTH)
   
    jPaneladd(jButton null)
   
    jPaneladd(jButton null)
   
    jPaneladd(jButton null)
   
    thisgetContentPane()add(jPanel BorderLayoutCENTER)
   
    jPaneladd(jScrollPane null)
   
    jScrollPanegetViewport()add(jTable null)
   
    }
   
    //模擬查詢數據庫
   
    void jButton_actionPerformed(ActionEvent e) {
   
    try { //制作表
   
    Vector vcol = new Vector() //列名
   
    Vector vrow = new Vector() //內容
   
    for (int col = ; col < ; col++) {
   
    vcoladdElement( + col)
   
    }
   
    for (int row = ; row < ; row++) {
   
    Vector vr = new Vector()
   
    for (int col = ; col < ; col++) {
   
    vraddElement(row + / + col)
   
    }
   
    vrowaddElement(vr
   
    }
   
    DefaultTableModel dtm = new DefaultTableModel(vrow vcol)
   
    jTable = new JTable(vrow vcol)
   
    jTablesetAutoResizeMode(JTableAUTO_RESIZE_OFF) //滾動條設置左右滾
   
    thisjScrollPanegetViewport()add(jTable null) //在滾動條中放入表
   
    }
   
    catch (Exception ex) {
   
    JOptionPaneshowMessageDialog(null ex)
   
    }
   
    }
   
    }
   
    class Frame_jButton_actionAdapter
   
    implements javaawteventActionListener {
   
    Frame adaptee;
   
    Frame_jButton_actionAdapter(Frame adaptee) {
   
    thisadaptee = adaptee;
   
    }
   
    public void actionPerformed(ActionEvent e) {
   
    adapteejButton_actionPerformed(e)
   
    }
   
    }


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26584.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.