繁体   English   中英

从DNA到RNA的转换Java Swing:为什么我的JButton不起作用?

[英]DNA to RNA Conversion Java Swing: Why aren't my JButtons working?

我正在使用一个简单的工具,用户可以输入字符串,RNA或DNA,然后单击一个按钮将其转录。 当我单击转录或反向转录JButton时,什么都没有发生! 请帮忙! 任何方向,提示或帮助都会很棒! 谢谢! 这是我的代码:

import java.awt.BorderLayout;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.event.*;

public class TranslationGUI extends javax.swing.JFrame implements ActionListener
{
    public static final int WIDTH = 1500;
    public static final int HEIGHT = 500;

    TextArea DNATextArea, RNATextArea, proteinTextArea;
    JButton transcribe, translate, reverseTranscribe;
    String DNA;
    String RNA;

/** Creates new form TranslationGUI */
public TranslationGUI() 
{
    super("Transcription and Translation Tool");
    setSize(WIDTH, HEIGHT);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new FlowLayout());     

    JPanel DNAPanel = new JPanel();
    DNAPanel.setPreferredSize(new Dimension(440,400));
    DNAPanel.add(new JLabel("DNA Sequence"));
    TextArea DNATextArea = new TextArea();
    DNAPanel.add(DNATextArea);
    DNATextArea.setEditable(true);
    DNAPanel.add(new JLabel("DNA (deoxyribonucleic acid)"));
    JButton transcribe = new JButton();
    DNAPanel.add(new JButton("Transcribe"));
    transcribe.addActionListener(this);
    add(DNAPanel, BorderLayout.WEST);
    DNAPanel.setBackground(Color.WHITE);

    JPanel RNAPanel = new JPanel();
    RNAPanel.setPreferredSize(new Dimension(440,400));
    RNAPanel.add(new JLabel("RNA Sequence"));
    TextArea RNATextArea = new TextArea();
    RNATextArea.setEditable(true);
    RNAPanel.add(RNATextArea);
    RNAPanel.add(new JLabel("RNA (ribonucleic acid)"));
    JButton translate = new JButton();
    RNAPanel.add(new JButton("Translate"));
    translate.addActionListener(this);
    JButton reverseTranscribe = new JButton();
    RNAPanel.add(new JButton("Reverse Transcribe"));
    reverseTranscribe.addActionListener(this);
    add(RNAPanel, BorderLayout.CENTER);
    RNAPanel.setBackground(Color.LIGHT_GRAY);

    JPanel proteinPanel = new JPanel();
    proteinPanel.setPreferredSize(new Dimension(440,400));
    proteinPanel.add(new JLabel("Protein Sequence"));
    TextArea proteinTextArea = new TextArea();
    proteinPanel.add(proteinTextArea);
    proteinPanel.add(new JLabel("Protein"));
    add(proteinPanel, BorderLayout.EAST);
    proteinPanel.setBackground(Color.WHITE);

    pack();
}

public void actionPerformed(ActionEvent event) 
{
    if(event.getSource()== transcribe)
    {
        DNATranscription();
    }
    else if(event.getSource()== reverseTranscribe)
    {
        RNATranscription();
    }
else if(event.getSource()== translate)
    {   
        Translate();
}
}

public void DNATranscription()
{   
    String DNA = DNATextArea.getText();
    char[] reverse = new char[DNA.length()];
    for (int i = 0; i < reverse.length; i++) 
    {
        switch(DNA.charAt(i)) 
        {
            case 'A': reverse[i] = 'T';break;
            case 'T': reverse[i] = 'A';break;
            case 'C': reverse[i] = 'G';break;
            case 'G': reverse[i] = 'C';break;
            default: 
                System.out.println("Not a DNA code");
        }
    }
    DNA = new String(reverse);
    RNATextArea.append(DNA);
}

public void RNATranscription()
{   
    String RNA = RNATextArea.getText();
    char[] reverse = new char[RNA.length()];
    for (int i = 0; i < reverse.length; i++) 
    {
        switch(RNA.charAt(i)) 
        {
            case 'T': reverse[i] = 'A';break;
            case 'A': reverse[i] = 'T';break;
            case 'G': reverse[i] = 'C';break;
            case 'C': reverse[i] = 'G';break;
            default: 
                System.out.println("Not a RNA code");
        }
    }
    RNA = new String(reverse);
    DNATextArea.append(RNA);
}

public void Translate()
{
    //do something
}

private static final String[][] CODON_AMINO = //table for the codon
                                           //that corresponds to a protein
    {
     {"att", "i"}, {"atc", "i"}, {"ata", "i"}, {"ctt", "l"},
     {"ctc", "l"}, {"cta", "l"}, {"ctg", "l"}, {"tta", "l"},
     {"ttg", "l"}, {"gtt", "v"}, {"gtc", "v"}, {"gta", "v"},
     {"gtg", "v"}, {"ttt", "f"}, {"ttc", "f"}, {"atg", "m"},
     {"tgt", "c"}, {"tgc", "c"}, {"gct", "a"}, {"gcc", "a"},
     {"gca", "a"}, {"gcg", "a"}, {"ggt", "g"}, {"ggc", "g"},
     {"gga", "g"}, {"ggg", "g"}, {"cct", "p"}, {"ccc", "p"},
     {"cca", "p"}, {"ccg", "p"}, {"act", "t"}, {"acc", "t"},
     {"aca", "t"}, {"acg", "t"}, {"tct", "s"}, {"tcc", "s"},
     {"tca", "s"}, {"tcg", "s"}, {"agt", "s"}, {"agc", "s"},
     {"tat", "y"}, {"tac", "y"}, {"tgg", "w"}, {"caa", "q"},
     {"cag", "q"}, {"aat", "n"}, {"aac", "n"}, {"cat", "h"},
     {"cac", "h"}, {"gaa", "e"}, {"gag", "e"}, {"gat", "d"},
     {"gac", "d"}, {"aaa", "k"}, {"aag", "k"}, {"cgt", "r"},
     {"cgc", "r"}, {"cga", "r"}, {"cgg", "r"}, {"aga", "r"},
     {"agg", "r"}
    };

/** This method is called from within the constructor to
 * initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is
 * always regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 400, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 300, Short.MAX_VALUE)
    );

    java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
    setBounds((screenSize.width-416)/2, (screenSize.height-338)/2, 416, 338);
}// </editor-fold>                        

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {

    TranslationGUI frame = new TranslationGUI();
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(TranslationGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(TranslationGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(TranslationGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(TranslationGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
            new TranslationGUI().setVisible(true);
        }
    });
}
// Variables declaration - do not modify                     
// End of variables declaration                   

}

您的问题是您要隐藏变量。

您在类中声明了JButton变量,然后在构造函数中重新声明了它们,因此,类中的JButton变量未引用连接侦听器的JButton对象。 因此,当您的actionPerformed方法检查所按下的JButton是否为transcribe JButton ,它不匹配,并且实际上transcribe在那时实际上为空(对其进行测试)。 解决方案:不要在构造函数中重新声明变量。

换句话说,在您的构造函数中更改以下内容:

// this creates a new transcribe variable inside of the 
// constructor, assigns it a JButton object, but the variable
// is only visible inside of the constructor.
JButton transcribe = new JButton();

对此:

// this creates a new JButton object and assigns it to the 
// class transcribe variable.
transcribe = new JButton();

编辑
哎呀,您要在GUI中添加另一个JButton -不要这样做!

DNAPanel.add(new JButton("Transcribe")); // ??

在此上方添加您创建的JButton。

DNAPanel.add(transcribe); // add the button created just above.

例如,

  translate = new JButton("Translate"); // give button a title
  RNAPanel.add(translate);
  translate.addActionListener(this);

几乎就像您正在竭尽全力确保该类中的JButton变量不起作用。 我当然是在开玩笑,但是您以2种不同的方式来阻止它,这是我以前从未见过的-我认为我已经看到了一切。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM