[英]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.