边界和面板组织

时间:2017-07-08 17:17:44

标签: java user-interface border

我的边界非常困难,我查看了教程和示例,每个人似乎都使用了不同的风格,我只是试图将内容组织成分隔的边框。底层panal的内容还没有完成,但我只是想在添加更多内容之前让它按原样运行。

编译器说两行java.lang.NullPointerException:

存在问题
package question2;

import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

/**
 * @author Matt Headley
  This frame shows a data set and its statistics.
  */
 public class ComputerStoreGUI extends JFrame
 {  



   private JCheckBox item1;
   private JCheckBox item2;
   private JCheckBox item3;
   private JCheckBox item4;
   private JCheckBox item5;
   private TitledBorder border;
   private TitledBorder border2;
   private static JPanel content;
   private static JPanel top;
   private static JPanel bottom;
    private JTextField parts;

public ComputerStoreGUI()
 {       
  JCheckBox item1 = new JCheckBox("Install Hard Drive - $25.00");
  JCheckBox item2 = new JCheckBox("Install RAM - $15.00");
  JCheckBox item3 = new JCheckBox("Remove Virus - $50.00");
  JCheckBox item4 = new JCheckBox("Format Hard Drive - $80.00");
  JCheckBox item5 = new JCheckBox("Quote Hourly Labour - $10.00");
  item1.setHorizontalAlignment(JCheckBox.LEFT);
  item2.setHorizontalAlignment(JCheckBox.LEFT);
  item3.setHorizontalAlignment(JCheckBox.LEFT);
  item4.setHorizontalAlignment(JCheckBox.LEFT);
  item5.setHorizontalAlignment(JCheckBox.LEFT);
  JTextField cost = new JTextField(10);


  top = new JPanel(new FlowLayout(FlowLayout.LEFT));
  top.add(item1);
  top.add(item2);
  top.add(item3);
  top.add(item4);
  top.add(item5);
  bottom.add(cost); //here ????????
  cost.setHorizontalAlignment(JTextField.CENTER);


}



public static void main(String[] args)
{       
JFrame frame = new ComputerStoreGUI(); // and here ???????

content = new JPanel();
content.setBorder(BorderFactory.createEmptyBorder(10, 10, 10,  10));

top = new JPanel();
top.setBorder(BorderFactory.createTitledBorder("Standard Services"));

bottom = new JPanel();
bottom.setBorder(BorderFactory.createTitledBorder("Hourly Service"));

    frame.setSize(250, 400);
    frame.setTitle("LU Computer Store");
    frame.setContentPane(content);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    content.add(top);
    content.add(bottom);
    frame.setVisible(true);
}

}

最终目标是看起来像这样: enter image description here

1 个答案:

答案 0 :(得分:0)

首先,我没有看到在你的例子中扩展JFrame的共鸣。因此,如果没有继承,您可以使用如下组合:

JFrmae frame = new JFrame();

了解详情:Why do we need to extend JFrame in a swing application?

  

编译器说两行有问题   java.lang.NullPointerException

原因是,您已声明JPanel bottom但未初始化您尝试使用它,从此行开始:bottom.add(cost);

做类似的事情:

bottom = new JPanel(new FlowLayout(FlowLayout.LEFT));
bottom.add(cost);

修改

  

评论:它现在运行,但面板很小

因为您需要为父JPanel设置布局,所以您可以使用BoxLayout将子面板添加到另一个下面,如下所示:

content = new JPanel();
content.setLayout(new BoxLayout(content, BoxLayout.PAGE_AXIS));

如果您想要add space between those two child panels,请按以下方式使用:

content.add(top);
content.add(Box.createRigidArea(new Dimension(0,10)));
content.add(bottom);