swingjava布局
A. 在java Swing中一個容器中可以有多個布局么
可以再JFrame中添加兩個JPanel 兩個JPanel的布局用一種,JPanel內再用另一種布局
B. swing 布局
窗口採用默認布局(BorderLayout),North放那四個字,
Center放JSplitPane,
splitPane中,左邊放樹(樹外面最好套一層JScrollPane)
splitPane右邊放一個JPanel,採用GridbagLayout,
第一行為一個JPanel(採用默認布局FlowLayout),放那些文本和單選按鈕,
第二行第一列放一個JPanel(設置border,裡面放JScrollPane套表格),第二列放一個JPanel(採用BoxLayout,裡面放兩個按鈕),第三列與第一列類似。
另外,你截圖上兩個表格未對齊,按我的方式,兩個表格是上對齊的,會好看一點。
寫完後才發現,你只截了窗口的一部分,外面還有個JSplitPane吧,不過按我的方法不影響,只是因為原來說的窗口(現在發現只是個JPanel),需要手工設置布局為BorderLayout
C. 在JAVAswing布局設置FlowLayout和GridLayout中了怎麼調節組件的大小。
這種布局情況要用GridBagLayout,FlowLayout和GridLayout完成不了
D. java swing布局
null layout不是很好,所有的東西都要自己定義,一旦窗口大小變化就要重新計算。我建議使用MigLayout。上手慢,但很強大。http://www.miglayout.com
而且,就算你要用內建的Layout Manager,還有一個GridBag Layout,比Grid Layout更強大一點。
接下來,那個邊框,不是JSeparator, 而是一個邊框。我猜是
Border result = BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "修改信息: ");
如果是我,使用MigLayout,以上代碼還是比較簡單的:
importjava.awt.event.KeyEvent;
importjavax.swing.BorderFactory;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
importjavax.swing.JTextField;
importjavax.swing.SwingUtilities;
importjavax.swing.border.Border;
importjavax.swing.border.EtchedBorder;
importnet.miginfocom.swing.MigLayout;
{
publicMyFrame(){
begin();
}
privatevoidbegin(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(newMigLayout("insets10,fill","[]","[]5[]"));
//firstpanel
JPanelfirst=newJPanel();
//first這個panel有5像素的邊緣,2列,3行。第一列右對齊,佔40%寬度;第二列默認,左對齊,占據剩餘所有空間。
first.setLayout(newMigLayout("insets5,fill","[right,40%]5[fill,grow]","[]5[]5[]"));
first.setOpaque(false);
//這個面板的border有些特殊:createTitledBorder()方法的簽名可以有兩個:前一個是線的類型,後面一個是標題文本。
Borderresult=BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED),"修改信息:");
first.setBorder(result);
//把first加到contentPane裡面
add(first,"cell00,grow");
JLabeloriginal=newJLabel("輸入原密碼:");
JLabelnewPass=newJLabel("輸入新密碼:");
JLabelconfirm=newJLabel("確認新密碼:");
JTextFieldorig_field=newJTextField();
JTextFieldnew_field=newJTextField();
JTextFieldconfirm_field=newJTextField();
//miglayout的核心就是網格排布。用坐標來定義添加元素的位置
first.add(original,"cell00,w100!");//addtocol0,line0,min:pref:maxwidthallsetto100
first.add(newPass,"cell01,w100!");//addtocol0,line1
first.add(confirm,"cell02,w100!");//addtocol0,line2
first.add(orig_field,"cell10,w150!");//addtocol1,line0,min:pref:maxwidthallsetto150
first.add(new_field,"cell11,w150!");//addtocol1,line1
first.add(confirm_field,"cell12,w150!");//addtocol1,line2
//按鈕面板
JPanelbuttons=newJPanel();
buttons.setOpaque(false);
//邊緣為5像素;有兩列,中間是10像素的間距,列內元素居中;有一行,行中上下對齊也是居中
buttons.setLayout(newMigLayout("insets5,fill","[center]10[center]","[center]"));
JButtonyes=newJButton("Y.確定");
//快捷鍵設為虛擬鍵Y,得到下劃線效果
yes.setMnemonic(KeyEvent.VK_Y);
JButtonquit=newJButton("Q.退出");
//快捷鍵設為虛擬鍵Q,得到下劃線效果
quit.setMnemonic(KeyEvent.VK_Q);
//把yes按鈕加到第一列第一行,min:pref:max的大小都設為100像素
buttons.add(yes,"cell00,w100!");
//把quit按鈕加到第二列第一行,min:pref:max的大小都設為100像素
buttons.add(quit,"cell10,w100!");
//把按鈕面板加到contentPane裡面
add(buttons,"cell01,grow");
pack();
setBounds(0,0,500,400);
setLocationRelativeTo(null);
setVisible(true);
}
publicstaticvoidmain(String[]args){
SwingUtilities.invokeLater(newRunnable(){
@Override
publicvoidrun(){
MyFrameframe=newMyFrame();
}
});
}
}
效果是這樣:
E. java swing怎樣開發出漂亮的界面
使用Swing照樣可以開發出漂亮的界面.
主要的解決方案如下:
1: 合理的布局 , 搭建好界面的框架. 熟悉常用的布局, 並且布局還可以嵌套布局. 可以實現復雜而又美觀的界面.
2: 適當的圖片, 按鈕, 背景等 都可以使用圖片, 當然了為了節省系統資源, 可以使用稍微壓縮得比較小的圖片.
3: 搭配html , swing支持html簡單的標簽, 所以美化JButton ,JLabel等組件時, 可以使用一些Html標簽. 來美化~~
4: 顏色調和. 界面要美觀, 也可以適當的添加顏色, 但是要注意搭配和協調
5: 重寫部分組件, swing自帶的組件外觀, 的確不太讓人恭維, 但是我們可以自己根據需求進行重寫.
6: 添加動態效果, 我們寫javaScript經常是用來做特效的 , 我們可以借鑒一些JS特效的思路, 使用線程, 來給swing組件 等,添加動態的效果 , 比如抖動, 移動 , 滑出 等 特效~
7: 更換皮膚和外觀 , 或者使用第三方的皮膚 ,比大神製作的皮膚BeautyEye ,就想當的漂亮
F. JAVA swing怎樣讓按鈕和標簽隨著窗口的放大而放大,排版不變
如果你想實現動態的按照要求的放大和縮小。那麼你應該設置布局為frame.setLayout(null)
定義變數 width,height。然後在窗口改變大小重繪組件的時候,動態設置組件大小
比如 JButton.setBounds(0,0,width/10,height/10);
===================================================================
建議使用borderlayout邊界布局。非常好用。用邊界布局套流布局,表布局就能做出很多界面了
簡單的範例,你參考下
publicclassMyBorderLayout{
publicstaticvoidmain(String[]args){
Framef=newFrame("P03窗口");
f.setLayout(newBorderLayout(30,5));
f.add(newButton("東"),BorderLayout.EAST);
f.add(newButton("西"),BorderLayout.WEST);
f.add(newButton("中"));
f.add(newButton("南"),BorderLayout.SOUTH);
f.add(newButton("北"),BorderLayout.NORTH);
f.pack();
f.setVisible(true);
}
}
如果你想實現動態的按照要求的放大和縮小。那麼你應該設置布局為frame.setLayout(null)
定義變數 width,height。然後在窗口改變大小重繪組件的時候,動態設置組件大小
比如 JButton.setBounds(0,0,width/10,height/10);
G. java swing 要怎麼控制布局啊 好亂啊 那些控制項的 size()和setBounds 根本沒用
如果你設置布局了那麼setsize、setlocation之類的方法就沒什麼用了,不過你可將布局設為空也就是setlayout(null);然後在setsize、setlocation,就沒問題了
H. java swing 實現以下布局
tabbedPane 加兩個panel
行駛記錄用MigLayout布局。
5行兩列。最小面的一行設grow ,列設span就可以了。
I. java關於swing窗口布局的小問題!
JSplitPane splitPane = new JSplitPane (JSplitPane.HORIZONTAL_SPLIT, a, b);
splitPane.setOneTouchExpandable (true);
splitPane.setDividerLocation (100);
J. 求助java的swing窗體怎麼做如圖布局效果
運行效果
importjava.awt.Container;
importjava.awt.Font;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.Box;
importjavax.swing.BoxLayout;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.SwingUtilities;
{
privateJLabelnumLabel=newJLabel("15");
privateJButtonstartBtn=newJButton("Start");
privateJButtonstopBtn=newJButton("Stop");
privateJButtonspeedUpBtn=newJButton("SpeedUp");
privateJButtonslowDownBtn=newJButton("SlowDown");
{
startBtn.addActionListener(this);
stopBtn.addActionListener(this);
speedUpBtn.addActionListener(this);
slowDownBtn.addActionListener(this);
Containercon=getContentPane();
con.setLayout(newBoxLayout(con,BoxLayout.Y_AXIS));
numLabel.setFont(newFont("",Font.BOLD,60));
BoxnumBox=Box.createHorizontalBox();
numBox.add(numLabel);
add(numBox);
BoxbtnBox=Box.createHorizontalBox();
btnBox.add(startBtn);
btnBox.add(stopBtn);
btnBox.add(speedUpBtn);
btnBox.add(slowDownBtn);
add(btnBox);
setTitle("ThreadTest");
setSize(400,300);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
@Override
publicvoidactionPerformed(ActionEvente){
}
publicstaticvoidmain(String[]args){
SwingUtilities.invokeLater(()->newTestWin());
}
}