當前位置:編程學習大全網 - 行動軟體 - java swing布局

java swing布局

null layout不是很好,所有的東西都要自己定義,壹旦窗口大小變化就要重新計算。我建議使用MigLayout。上手慢,但很強大。

而且,就算妳要用內建的Layout Manager,還有壹個GridBag Layout,比Grid Layout更強大壹點。

接下來,那個邊框,不是JSeparator, 而是壹個邊框。我猜是

Border result = BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "修改信息: ");

如果是我,使用MigLayout,以上代碼還是比較簡單的:

import?java.awt.event.KeyEvent;

import?javax.swing.BorderFactory;

import?javax.swing.JButton;

import?javax.swing.JFrame;

import?javax.swing.JLabel;

import?javax.swing.JPanel;

import?javax.swing.JTextField;

import?javax.swing.SwingUtilities;

import?javax.swing.border.Border;

import?javax.swing.border.EtchedBorder;

import?net.miginfocom.swing.MigLayout;

public?class?MyFrame?extends?JFrame?{

public?MyFrame()?{

begin();

}

private?void?begin()?{

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setLayout(new?MigLayout("insets?10,?fill",?"[]",?"[]5[]"));

//first?panel

JPanel?first?=?new?JPanel();

//first這個panel有5像素的邊緣,2列,3行。第壹列右對齊,占40%寬度;第二列默認,左對齊,占據剩余所有空間。

first.setLayout(new?MigLayout("insets?5,?fill",?"[right,?40%]5[fill,?grow]",?"[]5[]5[]"));

first.setOpaque(false);

//這個面板的border有些特殊:createTitledBorder()方法的簽名可以有兩個:前壹個是線的類型,後面壹個是標題文本。

Border?result?=?BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED),?"修改信息:?");

first.setBorder(result);

//把first加到contentPane裏面

add(first,?"cell?0?0,?grow");

JLabel?original?=?new?JLabel("輸入原密碼:?");

JLabel?newPass?=?new?JLabel("輸入新密碼:?");

JLabel?confirm?=?new?JLabel("確認新密碼:?");

JTextField?orig_field?=?new?JTextField();

JTextField?new_field?=?new?JTextField();

JTextField?confirm_field?=?new?JTextField();

//miglayout的核心就是網格排布。用坐標來定義添加元素的位置

first.add(original,?"cell?0?0,?w?100!");?//add?to?col?0,?line?0,?min:pref:max?width?all?set?to?100

first.add(newPass,?"cell?0?1,?w?100!");//add?to?col?0,?line?1

first.add(confirm,?"cell?0?2,?w?100!");//add?to?col?0,?line?2

first.add(orig_field,?"cell?1?0,?w?150!");//add?to?col?1,?line?0,?min:pref:max?width?all?set?to?150

first.add(new_field,?"cell?1?1,?w?150!");//add?to?col?1,?line?1

first.add(confirm_field,?"cell?1?2,?w?150!");//add?to?col?1,?line?2

//按鈕面板

JPanel?buttons?=?new?JPanel();

buttons.setOpaque(false);

//邊緣為5像素;有兩列,中間是10像素的間距,列內元素居中;有壹行,行中上下對齊也是居中

buttons.setLayout(new?MigLayout("insets?5,?fill",?"[center]10[center]",?"[center]"));

JButton?yes?=?new?JButton("Y.?確定");

//快捷鍵設為虛擬鍵Y,得到下劃線效果

yes.setMnemonic(KeyEvent.VK_Y);

JButton?quit?=?new?JButton("Q.?退出");

//快捷鍵設為虛擬鍵Q,得到下劃線效果

quit.setMnemonic(KeyEvent.VK_Q);

//把yes按鈕加到第壹列第壹行,min:pref:max的大小都設為100像素

buttons.add(yes,?"cell?0?0,?w?100!");

//把quit按鈕加到第二列第壹行,min:pref:max的大小都設為100像素

buttons.add(quit,?"cell?1?0,?w?100!");

//把按鈕面板加到contentPane裏面

add(buttons,?"cell?0?1,?grow");

pack();

setBounds(0,?0,?500,?400);

setLocationRelativeTo(null);

setVisible(true);

}

public?static?void?main(String[]?args)?{

SwingUtilities.invokeLater(new?Runnable()?{

@Override

public?void?run()?{

MyFrame?frame?=?new?MyFrame();

}

});

}

}

效果是這樣:

MigLayout還允許妳使用輔助線來debug。把這壹行:

first.setLayout(new?MigLayout("insets?5,?fill",?"[right,?40%]5[fill,?grow]",?"[]5[]5[]"));

改成:

first.setLayout(new?MigLayout("insets?5,?fill,debug",?"[right,?40%]5[fill,?grow]",?"[]5[]5[]"));

妳就可以看到first面板裏面的輔助線了。

  • 上一篇:刷關鍵詞快速排名軟件
  • 下一篇:sb什麽意思
  • copyright 2024編程學習大全網