所以我编写了一个Punnett方形小程序来自动化一些简单的生物计算并输出一个简单的Punnett方形视觉效果。对于那些不知道的人,Punnett广场只是生物学中用于在所有可能的孩子中找到某种基因型比率的设备。它相对简单;例如父母Aa和aa会创造Aa,Aa,aa和aa的后代(只是越过它们)。我已经为单基因和双基因(Aa + Aa; AaBb + AaBb)实现了这一点,其中单个基因位于2x2表中,而双重基因位于4x4表中。
我遇到的问题是我的显示器 - 我想要的是4x4表中的每个项目都居中(它们当前都位于每个单元格的左侧)。另外,我想找到一种方法将父母的基因放在桌子的一侧(所以在左边和顶部表示每个父母)。
我在GUI方面有点新手,并且很难在网上找到任何关于这种情况的帮助,所以想知道你是否可以提供帮助。
以下是GUI类的代码:
//Imports
public class GeneticsGUI
{
public static void main(String[] args)
{
JPanel content = new JPanel();
content.setLayout(new BorderLayout());
content.setSize(600, 600);
JTextField parent1 = new JTextField();
JTextField parent2 = new JTextField();
JPanel top = new JPanel(new GridLayout(3,2));
top.add(new JLabel("Parent 1:"));
top.add(parent1);
top.add(new JLabel("Parent 2:"));
top.add(parent2);
JButton submit = new JButton("Calculate");
submit.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==submit)
{
String p1 = parent1.getText();
String p2 = parent2.getText();
if(p1!=null&&p2!=null&&p1.length()==2&&p2.length()==2)
{
JPanel c2 = new JPanel();
JFrame window = new JFrame("Genetics");
window.add(c2);
window.setContentPane(c2);
window.setSize(600, 400);
window.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
window.setVisible(true);
String[][] mono = Genetics.monohybridPunett(p1, p2);
for(int row = 0; row<2 ; row++)
{
for(int col = 0; col<2; col++)
{
mono[row][col] = " "+ mono[row][col];
}
}
JTable table = new JTable(mono.length,mono.length);
table.setShowGrid(true);
for(int i = 0; i<mono.length; i++)
for(int j = 0; j<mono.length; j++)
table.setValueAt(mono[i][j], i, j);
DefaultTableCellRenderer t = new DefaultTableCellRenderer();
t.setHorizontalTextPosition(DefaultTableCellRenderer.CENTER);
t.setVerticalTextPosition(DefaultTableCellRenderer.CENTER);
table.setSize(300, 300);
table.isCellEditable(0,0);
table.setRowHeight(100);
c2.add(table,BorderLayout.EAST);;
c2.revalidate();
}
else if(p1!=null&&p2!=null&&p1.length()==4&&p2.length()==4)
{
JPanel c2 = new JPanel();
JFrame window = new JFrame("Genetics");
window.add(c2);
window.setContentPane(c2);
window.setSize(600, 500);
window.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
window.setVisible(true);
String[][] di = Genetics.dihybridPunett(p1, p2);
JTable table = new JTable(di.length,di.length);
table.setShowGrid(true);
DefaultTableModel model = new DefaultTableModel(di,new Object[]{"AaBb","AaBb","",""});
table.isCellEditable(0, 0);
table.setModel(model);
table.setRowHeight(100);
table.getColumnModel().getColumn(0).setPreferredWidth(100);
table.getColumnModel().getColumn(1).setPreferredWidth(100);
table.getColumnModel().getColumn(2).setPreferredWidth(100);
table.getColumnModel().getColumn(3).setPreferredWidth(100);
c2.add(table,BorderLayout.CENTER);
c2.revalidate();
}
}
}
});
top.add(submit);
content.add(top, BorderLayout.NORTH);
JFrame window = new JFrame("Genetics");
window.add(content);
window.setContentPane(content);
window.setSize(600,150);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
}
}