2011-12-13 66 views
2

我正在使用一個簡單的工具,用戶輸入他們的字符串或RNA或DNA,然後單擊一個按鈕,然後轉錄它。當我點擊我的轉錄或反轉錄JButton沒有任何反應!請幫忙!任何方向,提示或幫助將是偉大的!謝謝!這裏是我的代碼:DNA到RNA的轉換Java Swing:爲什麼我的JButtons不工作?

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     

} 
+0

您是否看到任何錯誤? – 2011-12-13 20:21:20

+0

嘗試用`event.getSource()替換`event.getSource()== transcribe`。equals(transcribe)` - 將其應用於其他條件。而對於未來 - 有單獨的行動聽衆。 – 2011-12-13 20:21:45

回答

5

你的問題是你是陰影變量。

您在類中聲明你的JButton變量,但在構造函數中再重新聲明它們,所以JButton對象獲取附加偵聽器未在班上JButton變量引用。因此,當您的actionPerformed方法檢查JButton按下的是否是抄錄JButton時,它不匹配,實際上抄錄在那一點實際上是空的(測試它並查看)。解決方案:不要在構造函數中重新聲明變量。

換句話說,在你的構造改變這一點:

// 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(); 

編輯
哎呀,你要添加另一個JButton的到GUI - 不要這樣做!

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變量將無法正常工作。我當然在開玩笑,但是你用兩種不同的方式阻止了它,這是我以前從未見過的 - 而且我認爲我已經看到了一切。