日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

實(shí)現(xiàn)JAVA手動(dòng)布局中各個(gè)組件能隨窗口變化的方法

 Ethan的博客 2011-01-06
實(shí)現(xiàn)JAVA手動(dòng)布局中各個(gè)組件能隨窗口變化的方法

毛永恒,2004-8-9,貴州大學(xué)計(jì)算機(jī)科學(xué)系

用JAVA編程的人也許都遇到過(guò)這樣的情況,當(dāng)用手動(dòng)布局做出一個(gè)界面時(shí),各個(gè)組件不能隨窗口隨意變化大小。但改用自動(dòng)布局后又特別的麻煩,有時(shí)為了一個(gè)按鈕的位置需要做非常復(fù)雜的設(shè)計(jì),最終效果仍不盡人意。
那么有沒(méi)有什么方法能使用手動(dòng)布局的組件可以隨著窗口的變化而隨意的變化呢?本人用Frame的componentResized事件實(shí)現(xiàn)手動(dòng)布局,不僅組件可以隨著窗口的變化而變化,而且思路清晰,布局靈活,代碼少,只需用幾句程序就可以解決問(wèn)題。
先看下圖:
 http://www./members/{毛永恒}/images/java.gif
上圖模擬一個(gè)對(duì)數(shù)據(jù)庫(kù)內(nèi)容增刪改查的界面,紅色為條件選擇區(qū)域,橙色為程序功能區(qū),表格為數(shù)據(jù)區(qū)。程序在JBuilder 9下編輯和運(yùn)行。
首先,建一個(gè)frame文件(Application應(yīng)用程序),在Design中將this中的layout設(shè)置為null(不要布局器);
第 二,在組件盤內(nèi)點(diǎn)選Swing Container頁(yè)簽,選取Jpanel圖標(biāo),在this上方拖拽一塊區(qū)域,同樣的方法在下方也拖拽一塊區(qū)域,為了方便 區(qū)分,將上方的Jpanel1區(qū)域設(shè)置為紅色,下方的Jpanel2區(qū)域設(shè)置為橙色。將Jpanel1和Jpanel2的layout設(shè)置為null(不 要布局器)。
第三,在Jpanel中放入一個(gè)Jlable標(biāo)題欄,JTextField1文本框和Jbutton按鈕,在組件盤內(nèi)點(diǎn)選 Swing 頁(yè)簽,選取JLable圖標(biāo)在Jpanel1的左邊畫一個(gè)標(biāo)題欄,將text改為“請(qǐng)輸入查詢條件”,再選取JtextField在 Jpanel1的中間畫一個(gè)文本框,將text改為空,最后選取Jbutton在Jpanel1又邊畫一個(gè)按鈕將text改為“查詢”。在Jpanel2 中畫三個(gè)Jbutton按鈕,將text分別設(shè)為“增加”、“刪除”、“修改”。
第四,在this的中間建一個(gè)表格用來(lái)顯示數(shù)據(jù)庫(kù)數(shù)據(jù)的內(nèi)容,在 Swing Container頁(yè)簽,選取jScrollPane圖標(biāo),在this的中間拖拽一個(gè)大的區(qū)域,接著在組件盤內(nèi)點(diǎn)選Swing 頁(yè)簽,選取 JTable圖標(biāo),將Jtable加入到j(luò)ScrollPane中。
這樣我的界面就做好了,但這個(gè)界面不能隨窗口自動(dòng)調(diào)整大小。下面編程實(shí)現(xiàn)手動(dòng)布局,使各區(qū)域能隨窗口自動(dòng)調(diào)整大小。
先用鼠標(biāo)選中this窗體,再選擇右邊的事件Events中的componentResized,雙擊鼠標(biāo)就進(jìn)到void this_componentResized(ComponentEvent e) {}中,在{}中寫入下列代碼:

//設(shè)置jPanel1的起點(diǎn)坐標(biāo)
jPanel1.setLocation(0,0); 
//設(shè)置jPanel1的高度和寬度
jPanel1.setSize(this.getWidth(),jPanel1.getHeight());

//設(shè)置jPanel2的起點(diǎn)坐標(biāo)(37是標(biāo)題欄的高度)
jPanel2.setLocation(0,this.getHeight()-jPanel2.getHeight()-37); 
//設(shè)置jPanel1的高度和寬度
jPanel2.setSize(this.getWidth(),jPanel2.getHeight());

//設(shè)置jScrollPanel的起點(diǎn)坐標(biāo)
jScrollPane1.setLocation(0,jPanel1.getHeight());
//設(shè)置jScrollPanel的高度和寬度
jScrollPane1.setSize(this.getWidth(),jPanel2.getY()-jPanel1.getHeight());

本程序只調(diào)整了Jpanel1、Jpanel2和JScrollPane1隨窗口變化,同樣的方法,可以使按鈕、文本框等一起隨窗口變化。
程序在“查詢”按鈕事件中模擬從數(shù)據(jù)庫(kù)中取數(shù)據(jù),并顯示在表格中。為了簡(jiǎn)潔,程序沒(méi)有對(duì)輸入條件、增加、刪除、修改等進(jìn)行處理。
程序源代碼(紅色部分是手寫的,具體功能見(jiàn)注釋,其余是由JB9自動(dòng)生成的):

package untitled1;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;

public class Frame1 extends JFrame {
  JPanel jPanel1 = new JPanel();
  JPanel jPanel2 = new JPanel();
  JScrollPane jScrollPane1 = new JScrollPane();
  JTable jTable1 = new JTable();
  JLabel jLabel1 = new JLabel();
  JTextField jTextField1 = new JTextField();
  JButton jButton1 = new JButton();
  JButton jButton2 = new JButton();
  JButton jButton3 = new JButton();
  JButton jButton4 = new JButton();

  public Frame1() {
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  public static void main(String[] args) {
    Frame1 frame1 = new Frame1();
    //定義顯示窗體的大小顯示窗口
    frame1.setSize(400, 350);
    frame1.show();
    //激活“查詢”按鈕事件
    frame1.jButton1.doClick();
  }
  private void jbInit() throws Exception {
    this.getContentPane().setLayout(null);
    jPanel1.setBackground(Color.red);
    jPanel1.setBounds(new Rectangle(43, 15, 297, 48));
    jPanel1.setLayout(null);
    jPanel2.setBounds(new Rectangle(50, 232, 297, 48));
    jPanel2.setLayout(null);
    jPanel2.setBackground(Color.orange);
    jScrollPane1.getViewport().setBackground(Color.pink);
    jScrollPane1.setBounds(new Rectangle(53, 74, 287, 138));
    jLabel1.setFont(new java.awt.Font("Dialog", 0, 15));
    jLabel1.setText("輸入查內(nèi)容");
    jLabel1.setBounds(new Rectangle(44, 12, 80, 27));
    jTextField1.setText("");
    jTextField1.setBounds(new Rectangle(125, 14, 70, 22));
    jButton1.setBounds(new Rectangle(221, 12, 61, 24));
    jButton1.setFont(new java.awt.Font("Dialog", 0, 13));
    jButton1.setText("查詢");
    jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
    jButton2.setBounds(new Rectangle(13, 14, 66, 27));
    jButton2.setFont(new java.awt.Font("Dialog", 0, 13));
    jButton2.setText("增加");
    jButton3.setText("刪除");
    jButton3.setBounds(new Rectangle(115, 14, 66, 27));
    jButton3.setFont(new java.awt.Font("Dialog", 0, 13));
    jButton4.setText("修改");
    jButton4.setBounds(new Rectangle(217, 14, 66, 27));
    jButton4.setFont(new java.awt.Font("Dialog", 0, 13));
    this.addHierarchyBoundsListener(new Frame1_this_hierarchyBoundsAdapter(this));
    this.addComponentListener(new Frame1_this_componentAdapter(this));
    this.getContentPane().add(jPanel1, null);
    jPanel1.add(jTextField1, null);
    jPanel1.add(jButton1, null);
    jPanel1.add(jLabel1, null);
    this.getContentPane().add(jPanel2, null);
    jPanel2.add(jButton3, null);
    jPanel2.add(jButton4, null);
    jPanel2.add(jButton2, null);
    this.getContentPane().add(jScrollPane1, null);
    jScrollPane1.getViewport().add(jTable1, null);
  }

  void this_componentResized(ComponentEvent e) {
//設(shè)置jPanel1的起點(diǎn)坐標(biāo)
jPanel1.setLocation(0,0);
//設(shè)置jPanel1的高度和寬度
jPanel1.setSize(this.getWidth(),jPanel1.getHeight());

//設(shè)置jPanel2的起點(diǎn)坐標(biāo)(37是標(biāo)題欄的高度)
jPanel2.setLocation(0,this.getHeight()-jPanel2.getHeight()-37); 
//設(shè)置jPanel2的高度和寬度
jPanel2.setSize(this.getWidth(),jPanel2.getHeight());

//設(shè)置jScrollPanel的起點(diǎn)坐標(biāo)
jScrollPane1.setLocation(0,jPanel1.getHeight());
//設(shè)置jScrollPanel的高度和寬度
jScrollPane1.setSize(this.getWidth(),jPanel2.getY()-jPanel1.getHeight()); 
}

  void jButton1_actionPerformed(ActionEvent e) {
// “查詢”按鈕事件,模擬從數(shù)據(jù)庫(kù)中取數(shù)據(jù)并顯示在表格中
try
         {
           Vector vcol = new Vector(); //列名
           Vector vrow = new Vector(); //內(nèi)容
           //用一個(gè)for循環(huán)來(lái)模擬數(shù)據(jù)庫(kù)的內(nèi)容
           for (int col=1;col<31;col++) {
             vcol.addElement("列"+col);
           }
           for (int row=1;row<101;row++) {
               Vector vr1 = new Vector();
               for (int col=1;col<31;col++) {
                 vr1.addElement(row+"/"+col);
               }
               vrow.addElement(vr1);
           }
          DefaultTableModel dtm=new DefaultTableModel(vrow,vcol);
          jTable1 = new JTable(vrow,vcol);
//滾動(dòng)條設(shè)置左右滾
jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
//在滾動(dòng)條中放入表
          this.jScrollPane1.getViewport().add(jTable1, null);
         }
                 catch(Exception ex)
                 {
                     System.out.println("錯(cuò)誤:" + ex);
                 }
  }
}

class Frame1_this_hierarchyBoundsAdapter extends java.awt.event.HierarchyBoundsAdapter {
  Frame1 adaptee;

  Frame1_this_hierarchyBoundsAdapter(Frame1 adaptee) {
    this.adaptee = adaptee;
  }
  public void ancestorResized(HierarchyEvent e) {

  }
}

class Frame1_this_componentAdapter extends java.awt.event.ComponentAdapter {
  Frame1 adaptee;

  Frame1_this_componentAdapter(Frame1 adaptee) {
    this.adaptee = adaptee;
  }
  public void componentResized(ComponentEvent e) {
    adaptee.this_componentResized(e);
  }
}

class Frame1_jButton1_actionAdapter implements java.awt.event.ActionListener {
  Frame1 adaptee;

  Frame1_jButton1_actionAdapter(Frame1 adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.jButton1_actionPerformed(e);
  }
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多