我迷失在摆出噩梦的秋千中:(我将暴露我的问题,但我正在寻找建议以及明确的解决方案。
我的问题:我想设计一个这样的表单:

我正在努力处理Netbeans生成的代码:
private void initComponents() {
buttonGroup1 = new javax.swing.ButtonGroup();
buttonGroup2 = new javax.swing.ButtonGroup();
jPanel1 = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
jTextField1 = new javax.swing.JTextField();
jTextField2 = new javax.swing.JTextField();
jPanel3 = new javax.swing.JPanel();
jPanel4 = new javax.swing.JPanel();
jRadioButton1 = new javax.swing.JRadioButton();
jRadioButton2 = new javax.swing.JRadioButton();
jRadioButton3 = new javax.swing.JRadioButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setMinimumSize(new java.awt.Dimension(200, 200));
jPanel1.setMinimumSize(new java.awt.Dimension(400, 44));
jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.Y_AXIS));
jPanel2.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 255, 255)));
jPanel2.setMaximumSize(new java.awt.Dimension(11111111, 2147483647));
jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.X_AXIS));
jTextField1.setFont(new java.awt.Font("Lucida Grande", 0, 48)); // NOI18N
jTextField1.setText("jTextField1");
jTextField1.setAlignmentY(0.0F);
jTextField1.setMaximumSize(new java.awt.Dimension(150, 2147483647));
jTextField1.setPreferredSize(new java.awt.Dimension(100, 42));
jPanel2.add(jTextField1);
jTextField2.setFont(new java.awt.Font("Lucida Grande", 0, 8)); // NOI18N
jTextField2.setText("jTextField2");
jTextField2.setAlignmentY(0.0F);
jTextField2.setMaximumSize(new java.awt.Dimension(150, 2147483647));
jTextField2.setPreferredSize(new java.awt.Dimension(100, 28));
jTextField2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField2ActionPerformed(evt);
}
});
jPanel2.add(jTextField2);
jPanel1.add(jPanel2);
jPanel3.setForeground(new java.awt.Color(255, 51, 51));
jPanel3.setLayout(new javax.swing.BoxLayout(jPanel3, javax.swing.BoxLayout.LINE_AXIS));
jPanel4.setLayout(new javax.swing.BoxLayout(jPanel4, javax.swing.BoxLayout.Y_AXIS));
jRadioButton1.setText("jRadioButton1");
jPanel4.add(jRadioButton1);
jRadioButton2.setText("jRadioButton2");
jPanel4.add(jRadioButton2);
jRadioButton3.setText("jRadioButton3");
jPanel4.add(jRadioButton3);
jPanel3.add(jPanel4);
jPanel1.add(jPanel3);
getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
pack();
}我真的不明白的是,当我更改jPanel3的布局时,jPanel2的渲染也会发生变化!
有没有人能给我一条可以遵循的方法?
发布于 2011-08-25 23:16:28
我推荐使用GridBagLayout,因为它可以最好地控制组件所在的位置以及它们占用的空间。
例如,要使JPanel 2和3填充您的内容窗格,您可以执行以下操作:
GridBagConstraints constraints = new GridBagConstraints();
JPanel jPanel1 = new JPanel(new GridBagLayout());
constraints.fill = GridBagConstraints.HORIZONTAL;
jPanel1.add(jPanel2, constraints);
constraints.gridy ++;
jPanel1.add(jPanel2, constraints);此外,如果您希望Swing代码在几天后返回时易于理解,则需要将其分解为函数,并使用更具描述性的变量名称,如"topTextPanel“和"middleButtonPanel”。
发布于 2011-08-25 23:25:38
类似这样的东西可以作为使用BoxLayout的起点:
JPanel panel1= new JPanel();
panel1.setLayout(new BoxLayout(panel1, BoxLayout.Y_AXIS));
JPanel panel2= new JPanel();
panel2.setLayout(new BoxLayout(panel2, BoxLayout.X_AXIS));
panel2.setMinimumSize(...); panel2.setMaximumSize(...) ; panel2.setPreferredSize(...);
JPanel panel3 = new JPanel();
panel3.setLayout(new BoxLayout(panel3, BoxLayout.X_AXIS));
panel3 .setMinimumSize(...); panel3 .setMaximumSize(...) ; panel3 .setPreferredSize(...);
JTextField tf1 = new JTextField("text_field_1");
tf1.setMinimumSize(...); tf1.setMaximumSize(...) ; tf1.setPreferredSize(...);
panel2.add(tf1);
panel.add(panel2);
panel.add(panel3);
panel.add(Box.createVerticalGlue());
panel.add(Box.createRigidArea(new Dimension(...)));发布于 2011-08-25 23:35:30
使用NetBeans完全可以做到这一点。
但是,要使用马蒂斯(NetBeans中的Swing设计器),您必须了解三件事:
https://stackoverflow.com/questions/7192822
复制相似问题