public SAMRecordFilter(final BamView bamView) {
    super("Filter Reads");

    JPanel pane = (JPanel) getContentPane();
    pane.setLayout(new GridBagLayout());

    int nflags = SAMRecordFlagPredicate.FLAGS.length;
    GridBagConstraints c = new GridBagConstraints();

    int nrows = 0;
    c.ipadx = 5;
    c.ipady = 2;
    c.gridx = 0;
    c.gridwidth = 2;
    c.anchor = GridBagConstraints.WEST;
    c.gridy = nrows++;

    // MAPQ
    pane.add(new JLabel(" By Mappying Quality (mapq) cut-off:"), c);

    c.gridy = nrows++;
    c.gridwidth = 1;
    final JTextField cutOff = new JTextField(12);
    if (bamView.getSamRecordMapQPredicate() != null)
      cutOff.setText(Integer.toString(bamView.getSamRecordMapQPredicate().cutOff));

    cutOff.addKeyListener(
        new KeyAdapter() {
          public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) setQualityCutOff(cutOff, bamView);
          }
        });
    pane.add(cutOff, c);

    c.gridx = 1;
    final JButton setCutOff = new JButton("SET");
    setCutOff.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            setQualityCutOff(cutOff, bamView);
          }
        });
    pane.add(setCutOff, c);

    // FLAGS
    c.gridwidth = 2;
    c.gridx = 0;
    c.gridy = nrows++;
    pane.add(new JSeparator(), c);

    c.gridy = nrows++;
    pane.add(new JLabel(" By SAM FLAG column:"), c);
    c.gridy = nrows++;
    pane.add(new JLabel(" Select below to show or hide only the reads with "), c);
    c.gridy = nrows++;
    pane.add(new JLabel(" the flag set."), c);

    final JComboBox flagCombo[] = new JComboBox[nflags];

    final String[] items = {"", "SHOW", "HIDE"};
    c.gridwidth = 1;
    for (int j = 0; j < nflags; j++) {
      flagCombo[j] = new JComboBox(items);
      if (SAMRecordFlagPredicate.FLAGS_DESCRIPTION[j].equalsIgnoreCase("Read Unmapped"))
        flagCombo[j].setSelectedItem("HIDE");

      flagCombo[j].addActionListener(
          new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              filterChange(bamView, flagCombo);
            }
          });

      c.gridy = nrows++;
      c.gridx = 0;
      pane.add(flagCombo[j], c);
      c.gridx = 1;
      pane.add(new JLabel(SAMRecordFlagPredicate.FLAGS_DESCRIPTION[j]), c);
    }

    JButton closeFrame = new JButton("Close");
    closeFrame.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            setVisible(false);
          }
        });
    c.gridx = 1;
    c.gridy = nrows++;
    c.fill = GridBagConstraints.NONE;
    pane.add(closeFrame, c);

    pack();

    rightJustifyFrame(this);
    setVisible(true);
  }