关于控件复杂布局的问题,请高手指点,谢谢

「已注销」 2018-01-15 08:28:00
我准备做一个界面,第一行有7个控件,第二行有5个控件,第三行有2个控件,第四行有6个控件,第五行有3个控件,要求:
1.每行靠近窗体的控件距离窗体边缘10像素;
2.每列靠近窗体的控件距离窗体边缘10像素;
3.当窗体宽度变化时,控件宽度随之等比例变化,每行控件间间距不变;可以考虑设置最小宽度,即每个控件均能显示
4.当窗体高度变化时,控件高度随之等比例变化,每行控件间间距不变;可以考虑设置最小高度,即每个控件均能显示

各位高手,这种用网格式布局还是表格式布局能实现呢?请大家提供点思路或简单源码,学习下,谢谢

...全文
641 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Stuild Stuil 2018-01-19
  • 打赏
  • 举报
回复
自己修改去 改几个属性就行、
Stuild Stuil 2018-01-19
  • 打赏
  • 举报
回复
package E; import java.awt.*; import javax.swing.*; public class A extends JFrame { public static void main(String args[]) { new A(); } public A() { init(); this.setSize(600, 600); this.setVisible(true); } public void init() { j1 = new JButton("打开"); j2 = new JButton("保存"); j3 = new JButton("另存为"); b1 = new JButton("另存为1"); b2 = new JButton("另存为2"); b3 = new JButton("另存为3"); b4 = new JButton("另存为4"); b5 = new JButton("rrr"); b6 = new JButton("另存tttt4"); b7 = new JButton("另存yyy为4"); j4 = new JPanel(); String[] str = { "java笔记", "C#笔记", "HTML5笔记" }; j5 = new JComboBox(str); j6 = new JTextField(); j7 = new JButton("清空"); j8 = new JList(str); j9 = new JTextArea(); j9.setBackground(Color.PINK);// 为了看出效果,设置了颜色 GridBagLayout layout = new GridBagLayout(); this.setLayout(layout); this.add(j1);// 把组件添加进jframe this.add(j2); this.add(j3); this.add(b1); this.add(b2); this.add(b3); this.add(b4); this.add(b5); this.add(b6); this.add(b7); this.add(j4); this.add(j5); this.add(j6); this.add(j7); this.add(j8); this.add(j9); GridBagConstraints s = new GridBagConstraints();// 定义一个GridBagConstraints, // 是用来控制添加进的组件的显示位置 s.fill = GridBagConstraints.BOTH; // 该方法是为了设置如果组件所在的区域比组件本身要大时的显示情况 // NONE:不调整组件大小。 // HORIZONTAL:加宽组件,使它在水平方向上填满其显示区域,但是不改变高度。 // VERTICAL:加高组件,使它在垂直方向上填满其显示区域,但是不改变宽度。 // BOTH:使组件完全填满其显示区域。 s.gridwidth = 1;// 该方法是设置组件水平所占用的格子数,如果为0,就说明该组件是该行的最后一个 s.weightx = 0;// 该方法设置组件水平的拉伸幅度,如果为0就说明不拉伸,不为0就随着窗口增大进行拉伸,0到1之间 s.weighty = 0;// 该方法设置组件垂直的拉伸幅度,如果为0就说明不拉伸,不为0就随着窗口增大进行拉伸,0到1之间 layout.setConstraints(j1, s);// 设置组件 s.gridwidth = 1; s.weightx = 0; s.weighty = 0; layout.setConstraints(j2, s); s.gridwidth = 1; s.weightx = 0; s.weighty = 0; layout.setConstraints(j3, s); s.gridwidth = 1; s.weightx = 0; s.weighty = 0; layout.setConstraints(b1, s); s.gridwidth = 1; s.weightx = 0; s.weighty = 0; layout.setConstraints(b2, s); s.gridwidth = 1; s.weightx = 0; s.weighty = 0; layout.setConstraints(b3, s); s.gridwidth = 0; s.weightx = 0; s.weighty = 0; layout.setConstraints(b4, s); s.gridwidth = 0;// 该方法是设置组件水平所占用的格子数,如果为0,就说明该组件是该行的最后一个 s.weightx = 0;// 不能为1,j4是占了4个格,并且可以横向拉伸, // 但是如果为1,后面行的列的格也会跟着拉伸,导致j7所在的列也可以拉伸 // 所以应该是跟着j6进行拉伸 s.weighty = 0; layout.setConstraints(j4, s); s.gridwidth = 1; s.weightx = 0; s.weighty = 0; layout.setConstraints(b5, s); s.gridwidth = 2; s.weightx = 0; s.weighty = 0; layout.setConstraints(b6, s); s.gridwidth = 0; s.weightx = 0; s.weighty = 0; layout.setConstraints(b7, s); s.gridwidth = 2; s.weightx = 0; s.weighty = 0; layout.setConstraints(j5, s); s.gridwidth = 4; s.weightx = 1; s.weighty = 0; layout.setConstraints(j6, s); s.gridwidth = 0; s.weightx = 0; s.weighty = 0; layout.setConstraints(j7, s); s.gridwidth = 2; s.weightx = 0; s.weighty = 1; layout.setConstraints(j8, s); s.gridwidth = 5; s.weightx = 0; s.weighty = 1; layout.setConstraints(j9, s); } JButton j1; JButton j2; JButton j3; JButton b1; JButton b2; JButton b3; JButton b4; JButton b5; JButton b6; JButton b7; JPanel j4; JComboBox j5; JTextField j6; JButton j7; JList j8; JTextArea j9; }
「已注销」 2018-01-16
  • 打赏
  • 举报
回复
来个大佬指点下阿

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧