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());
}
}