Et simpelt regneark, selv-opdaterende
Jeg har endnu en opgave: "Lav et program med en JTable, der skal have størrelsen 4x5 felter. Man skal kunne skrive i de 3 øverste rækker, mens hvert felt i den nederste række automatisk beregnes som summen af felterne i søjlen, hvor tomme felter eller tekst regnes som 0."Well, jeg er nået et stykke, men synes at det her må kunne laves ualmindeligt meget lettere. Et problem er at JTable tager et todimensionelt array af Objects, og så kan jeg ikke bare klaske int's ind over det hele. Det er lykkedes mig at få beregnet på array'et, men det er noget klamp: Gentagelser, gentagelser, gentagelser.
Kan det passe at man skal lave en inputbuffer og en eventlistener til hvert enkelt felt for at beregne automatisk? Hvordan gøres det let? Man kan vel lave en calculateAll(), der så trigges af events, kan det gøres uden at skulle assigne 20 eventlisteners? Og hvis det skal gøres, hvordan gøres det så simpelt uden at ligne resten af det kludder jeg har lavet?
Venligst (og her er noget klamp-kode):
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class JTable2 extends JFrame
{
private JPanel topPanel;
private JTable table;
private JScrollPane scrollPane;
String s1 = "1", s2 = "2", s3 = "3", s4 = "4", s6 = "6", s7 = "7", s8 = "8", s9 = "9", s11 = "11",
s12 = "12", s13 = "13", s14 = "14", s16 = "16", s17 = "17", s18 = "18", s19 = "19";
int i5 = Integer.parseInt(s1)+Integer.parseInt(s2) +Integer.parseInt(s3)+Integer.parseInt(s4);
int i10 = Integer.parseInt(s6)+Integer.parseInt(s7) +Integer.parseInt(s8)+Integer.parseInt(s9);
int i15 = Integer.parseInt(s11)+Integer.parseInt(s12) +Integer.parseInt(s13)+Integer.parseInt(s14);
int i20 = Integer.parseInt(s16)+Integer.parseInt(s17) +Integer.parseInt(s18)+Integer.parseInt(s19);
String s5 = String.valueOf(i5);
String s10 = String.valueOf(i10);
String s15 = String.valueOf(i15);
String s20 = String.valueOf(i20);
public JTable2()
{
setTitle( "JTable2" );
setSize( 400, 140 );
setBackground( Color.gray );
topPanel = new JPanel();
topPanel.setLayout( new BorderLayout() );
getContentPane().add( topPanel );
String columnNames[] = { "1", "2", "3", "4" };
String dataValues[][] =
{
{ s1, s6, s11, s16 },
{ s2, s7, s12, s17 },
{ s3, s8, s13, s18 },
{ s4, s9, s14, s19 },
{ s5, s10, s15, s20 }
};
table = new JTable( dataValues, columnNames );
System.out.println(getValueAt(1,4));
scrollPane = new JScrollPane( table );
topPanel.add( scrollPane, BorderLayout.CENTER );
}
public static void main( String args[] )
{
JTable2 mainFrame = new JTable2();
mainFrame.setVisible( true );
}
}
