很多初學者在用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 javax
swing
*;
import java
awt
*;
import java
awt
event
*;
import java
util
Vector;
import javax
swing
table
DefaultTableModel;
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) {
e
printStackTrace();
}
}
public static void main(String[] args) {
Frame
frame
= new Frame
();
frame
setSize(new Dimension(
));
frame
show();
}
private void jbInit() throws Exception {
this
getContentPane()
setLayout(borderLayout
);
jPanel
setBackground(Color
red);
jPanel
setLayout(flowLayout
);
jPanel
setBackground(Color
red);
jPanel
setLayout(flowLayout
);
jPanel
setBackground(Color
pink);
jPanel
setLayout(gridLayout
);
jLabel
setPreferredSize(new Dimension(
));
jLabel
setText(
請輸入查詢條件
);
jTextField
setPreferredSize(new Dimension(
));
jTextField
setText(
);
jButton
setText(
查詢
);
jButton
addActionListener(new Frame
_jButton
_actionAdapter(this));
flowLayout
setAlignment(FlowLayout
LEFT);
flowLayout
setHgap(
);
flowLayout
setVgap(
);
jButton
setText(
增加
);
jButton
setText(
刪除
);
jButton
setText(
修改
);
flowLayout
setHgap(
);
flowLayout
setVgap(
);
this
setDefaultCloseOperation(EXIT_ON_CLOSE);
this
getContentPane()
add(jPanel
BorderLayout
NORTH);
jPanel
add(jLabel
null);
jPanel
add(jTextField
null);
jPanel
add(jButton
null);
this
getContentPane()
add(jPanel
BorderLayout
SOUTH);
jPanel
add(jButton
null);
jPanel
add(jButton
null);
jPanel
add(jButton
null);
this
getContentPane()
add(jPanel
BorderLayout
CENTER);
jPanel
add(jScrollPane
null);
jScrollPane
getViewport()
add(jTable
null);
}
//模擬查詢數據庫
void jButton
_actionPerformed(ActionEvent e) {
try { //制作表
Vector vcol = new Vector(); //列名
Vector vrow = new Vector(); //內容
for (int col =
; 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);
jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); //滾動條設置左右滾
this.jScrollPane1.getViewport().add(jTable1, null); //在滾動條中放入表
}
catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex);
}
}
}
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);
}
}
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19316.html