Quelltext kürzen

marian04

Aktives Mitglied
Hallo Leute,

ist es noch möglich diesen Quelltext zu kürzen?
Falls ja wie?
Warum das ganze?
Ich denke das ein kurzer Text einfacher zu überschauen ist.

[Java]import java.lang.String;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
*
* description
*
* @version 1.0 from 17.03.2010
* @marian
*/

public class testturtle6 extends JFrame {
// Anfang Attribute
private Canvas canvas1 = new Canvas();
private JPanel jPanel1 = new JPanel(null);
private JCheckBox jCheckBox1 = new JCheckBox();
private JCheckBox jCheckBox2 = new JCheckBox();
private ButtonGroup group = new ButtonGroup();
private JButton jButton1 = new JButton();
private JButton jButton2 = new JButton();
private JButton jButton3 = new JButton();
private JButton jButton4 = new JButton();
private JButton jButton5 = new JButton();
private JButton jButton6 = new JButton();
private JButton jButton7 = new JButton();
private JButton jButton8 = new JButton();
private JButton jButton9 = new JButton();
private JButton jButton10 = new JButton();
private JButton jButton11 = new JButton();
private JTextField jTextField1 = new JTextField();
private JLabel jLabel1 = new JLabel();

private Turtle7 kroete = new Turtle7();
// Ende Attribute

public testturtle6 (String title) {
super (title);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
int frameWidth = 800;
int frameHeight = 600;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
Container cp = getContentPane();
cp.setLayout(null);
// Anfang Komponenten

canvas1.setBounds(80, 16, 617, 337);
canvas1.setBackground(Color.WHITE);
cp.add(canvas1);

jPanel1.setBounds(80, 384, 617, 137);
cp.add(jPanel1);

jButton1.setBounds(8, 8, 81, 33);
jButton1.setText("Home");
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton1_ActionPerformed(evt);
}
});

jPanel1.add(jButton1);
jButton2.setBounds(104, 8, 81, 33);
jButton2.setText("Clear");
jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton2_ActionPerformed(evt);
}
});

jPanel1.add(jButton2);
jButton3.setBounds(208, 8, 81, 33);
jButton3.setText("Vor. 10");
jButton3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton3_ActionPerformed(evt);
}
});

jPanel1.add(jButton3);
jButton4.setBounds(312, 8, 81, 33);
jButton4.setText("A");
jButton4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton4_ActionPerformed(evt);
}
});

jPanel1.add(jButton4);
jButton5.setBounds(416, 8, 81, 33);
jButton5.setText("Quadrat");
jButton5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton5_ActionPerformed(evt);
}
});

jPanel1.add(jButton5);
jButton6.setBounds(512, 8, 81, 33);
jButton6.setText("Links");
jButton6.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton6_ActionPerformed(evt);
}
});

jPanel1.add(jButton6);
jButton7.setBounds(8, 56, 81, 33);
jButton7.setText("Rechts");
jButton7.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton7_ActionPerformed(evt);
}
});

jPanel1.add(jButton7);
jButton8.setBounds(104, 56, 81, 33);
jButton8.setText("-45");
jButton8.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton8_ActionPerformed(evt);
}
});

jPanel1.add(jButton8);
jButton9.setBounds(208, 56, 81, 33);
jButton9.setText("+45");
jButton9.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton9_ActionPerformed(evt);
}
});

jPanel1.add(jButton9);
jButton10.setBounds(416, 56, 97, 33);
jButton10.setText("Winkel v.");
jButton10.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton10_ActionPerformed(evt);
}
});

jPanel1.add(jButton10);
jButton11.setBounds(312, 56, 81, 33);
jButton11.setText("Dreieck");
jButton11.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton11_ActionPerformed(evt);
}
});

jPanel1.add(jButton11);
jLabel1.setBounds(176, 528, 416, 32);
jLabel1.setText("Status anzeige");
jLabel1.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(jLabel1);

jTextField1.setBounds(288, 104, 137, 24);
jTextField1.setText("0");
jPanel1.add(jTextField1);

jCheckBox1.setBounds(32, 104, 137, 25);
jCheckBox1.setText("Nicht Zeichnen");

ItemListener malenlist = new ItemListener() {
public void itemStateChanged( ItemEvent e ) {
kroete.setPendown(false);
}
};
jCheckBox1.addItemListener( malenlist );





jCheckBox2.setBounds(480, 104, 125, 17);
jCheckBox2.setText("wieder Zeichnen");
jCheckBox2.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent evt) {
jCheckBox2_ItemStateChanged(evt);
}
});
jPanel1.add(jCheckBox1);
jPanel1.add(jCheckBox2);
// Ende Komponenten
setResizable(false);
setVisible(true);
kroete.setTurtle(canvas1);


group.add(jCheckBox2);
group.add(jCheckBox1);








}

// Anfang Methoden
public void jButton1_ActionPerformed(ActionEvent evt) {
kroete.h();
jLabel1.setText(kroete.status());
}

public void jButton2_ActionPerformed(ActionEvent evt) {
kroete.c();
jLabel1.setText(kroete.status());
}

public void jButton3_ActionPerformed(ActionEvent evt) {
kroete.v();
jLabel1.setText(kroete.status());
}

public void jButton4_ActionPerformed(ActionEvent evt) {
kroete.a();
jLabel1.setText(kroete.status());
}

public void jButton5_ActionPerformed(ActionEvent evt) {
kroete.q();
jLabel1.setText(kroete.status());
}

public void jButton6_ActionPerformed(ActionEvent evt) {
kroete.l();
jLabel1.setText(kroete.status());
}

public void jButton7_ActionPerformed(ActionEvent evt) {
kroete.r();
jLabel1.setText(kroete.status());
}

public void jButton8_ActionPerformed(ActionEvent evt) {
kroete.setRPos(kroete.getRPos()+315);
jLabel1.setText(kroete.status());
}

public void jButton9_ActionPerformed(ActionEvent evt) {
kroete.setRPos(kroete.getRPos()+45);
jLabel1.setText(kroete.status());
}

public void jButton10_ActionPerformed(ActionEvent evt) {
String text = jTextField1.getText();
int a = Integer.parseInt(text);
kroete.setRPos(kroete.getRPos()+a);
jLabel1.setText(kroete.status());
}

public void jButton11_ActionPerformed(ActionEvent evt) {
kroete.d();
jLabel1.setText(kroete.status());
}



public void jCheckBox2_ItemStateChanged(ItemEvent evt) {
kroete.setPendown(true);
}
//


// Ende Methoden

public static void main(String[] args) {
new testturtle6("testturtle6");
}
}
[/code]

Mfg
 
ich empfehle dir statt den ganzen einzenlen ActionPerformed-Funktionen würd ich dir eher nur eine einzige verwenden, die mittels switch oder sowas arbeitet.. damit könntest du recht einfach zb
Java:
jLabel1.setText(kroete.status());
dir recht häufig ersparen (wenn die if / switch-konstruktion entsprechend ist)

und wenn dus wirklich kürzer machen willst, könntest du dir die ganzen einstellungen (wie name des JButtons, Font-eigenschaften, etc) alles in arrays packen, und dann einfach mit ner schleife alle JButtons (die dann ebenfalls ein JButton[] sein sollte), befüllen.

man kann im prinzip fast immer einen code kürzer machen, aber es ist eher selten, dass er dadurch einfacher / übersichtlicher wird. (ist aber auch zum teil geschmackssache)
 
vermutlich kann man noch mehr am code kürzen, bin jetz auch schon etwas müde, also verzeiht wenn ich sogar crap gemacht hab 😉
(sollte btw eh nur als idee dienen - daher auch nur die jbuttons als array rausgezogen)

Java:
import java.lang.String;
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

/**
 * 
 * description
 * 
 * @version 1.0 from 17.03.2010
 * @marian
 */

public class testturtle6 extends JFrame implements ActionListener {
	/**
	 * 
	 */
	private static final long serialVersionUID = -1418787376026542777L;
	// Anfang Attribute
	private Canvas canvas1 = new Canvas();
	private JPanel jPanel1 = new JPanel(null);
	private JCheckBox jCheckBox1 = new JCheckBox();
	private JCheckBox jCheckBox2 = new JCheckBox();
	private ButtonGroup group = new ButtonGroup();
	private JButton[] jButtons = new JButton[11];
	private String[] texts = new String[]{
			"Home", "Clear", "Vor. 10", "A", "Quadrat", "Links", 
			"Rechts", "-45", "+45", "Winkel v.", "Dreieck"
	};
	private Rectangle[] rects = new Rectangle[]{
			new Rectangle(8, 8, 81, 33),
			new Rectangle(104, 8,81,33),
			new Rectangle(208, 8, 81, 33),
			new Rectangle(312,8,81,33),
			new Rectangle(416, 8, 81, 33),
			new Rectangle(512, 8, 81, 33),
			new Rectangle(8, 56, 81, 33),
			new Rectangle(104, 56, 81, 33),
			new Rectangle(208, 56, 81, 33),
			new Rectangle(416, 56, 97, 33),
			new Rectangle(312, 56, 81, 33)
	};
	private JButton jButton11 = new JButton();
	private JTextField jTextField1 = new JTextField();
	private JLabel jLabel1 = new JLabel();

	private Turtle7 kroete = new Turtle7();

	// Ende Attribute

	public testturtle6(String title) {
		super(title);
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		int frameWidth = 800;
		int frameHeight = 600;
		setSize(frameWidth, frameHeight);
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		int x = (d.width - getSize().width) / 2;
		int y = (d.height - getSize().height) / 2;
		setLocation(x, y);
		Container cp = getContentPane();
		cp.setLayout(null);
		// Anfang Komponenten

		canvas1.setBounds(80, 16, 617, 337);
		canvas1.setBackground(Color.WHITE);
		cp.add(canvas1);

		jPanel1.setBounds(80, 384, 617, 137);
		cp.add(jPanel1);

		for(int i = 0; i < jButtons.length; i++){
			jButtons[i] = new JButton(texts[i]); //erspart das .setText
			jButtons[i].addActionListener(this);
			jButtons[i].setActionCommand(texts[i]); // wird beim actionEvent gebraucht
			jButtons[i].setBounds(rects[i]);
			
			jPanel1.add(jButtons[i]);
		}
		
		jPanel1.add(jButton11);
		jLabel1.setBounds(176, 528, 416, 32);
		jLabel1.setText("Status anzeige");
		jLabel1.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
		cp.add(jLabel1);

		jTextField1.setBounds(288, 104, 137, 24);
		jTextField1.setText("0");
		jPanel1.add(jTextField1);

		jCheckBox1.setBounds(32, 104, 137, 25);
		jCheckBox1.setText("Nicht Zeichnen");

		ItemListener malenlist = new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				kroete.setPendown(false);
			}
		};
		jCheckBox1.addItemListener(malenlist);

		jCheckBox2.setBounds(480, 104, 125, 17);
		jCheckBox2.setText("wieder Zeichnen");
		jCheckBox2.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent evt) {
				jCheckBox2_ItemStateChanged(evt);
			}
		});
		jPanel1.add(jCheckBox1);
		jPanel1.add(jCheckBox2);
		// Ende Komponenten
		setResizable(false);
		setVisible(true);
		kroete.setTurtle(canvas1);

		group.add(jCheckBox2);
		group.add(jCheckBox1);

	}

	public void jCheckBox2_ItemStateChanged(ItemEvent evt) {
		kroete.setPendown(true);
	}

	//

	// Ende Methoden

	public static void main(String[] args) {
		new testturtle6("testturtle6");
	}

	@Override
	public void actionPerformed(ActionEvent action) {
		String ac = action.getActionCommand();
		int nr = -1;
		for(int i = 0; i < jButtons.length; i++){
			if(ac.equals(jButtons[i].getActionCommand())){
				nr = i;
				break;
			}
		}
		switch(nr){
			case 0: 
				kroete.h();
				break;
			case 1: 
				kroete.c();
				break;
			case 2:
				kroete.v();
				break;
			case 3:
				kroete.a();
				break;
			case 4:
				kroete.q();
				break;
			case 5:
				kroete.l();
				break;
			case 6:
				kroete.r();
				break;
			case 7:
				kroete.setRPos(kroete.getRPos() + 315);
				break;
			case 8:
				kroete.setRPos(kroete.getRPos() + 45);
				break;
			case 9:
				String text = jTextField1.getText();
				int a = Integer.parseInt(text);
				kroete.setRPos(kroete.getRPos() + a);
				break;
			case 10:
				kroete.d();
				break;
			default:
				System.err.println("error - unbekannter action-command!");
				break;
		}
		jLabel1.setText(kroete.status());
	}
}

greetz, Nardian
 
bei meiner "lösung" sollte noch dazu gesagt werden, dass du aufpassen solltest - da in dem code nur eine array-länge überprüft wird (und zwar die von jbuttons).

soll heißen, dass wenn du einen neuen jbutton hinzufügst (also einfach in zeile 26 das .. = new JButton[11] auf [12] änderst), du in der for-schleife (73-80) klarerweise eine Exception bekommen wirst, weil es von rects und texts keine 12 einträge gibt (sondern nur 11).
also entweder einfach drauf aufpassen, dass alle 3 arrays immer gleich lang sind (bzw jbuttons am "kürzesten" ist, dann gibts auch keine probs), oder eben die for-bedingung um die beiden überprüfungen erweitern... also zb
[java=73] for(int i = 0; i < jButtons.length && i < texts.length && i < rects.length; i++){
[/code]

greetz
 
Sowas:
[Java] Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);[/code]
Kann man man mit folgendem ersetzen:
Java:
setLocationRelativeTo(null);

Wenn man einen anständigen LayoutManager verwendet, spart man sich das Platzieren der Komponente mit setBounds()
Ansonsten sollte man AWT Komponenten (z.B. Canvas) nicht mit Swing Komponenten mischen.
 

Zurück
Oben