Java tips

Tags:    java
Skrevet af Bruger #173 @ 17.06.2001
Tips til kodning

I denne artikel vil vi se på nogle af de genveje i koden man kan lave i Java. De kan være en fordel, men de kan også virke uoverskuelige, hvis man ikke lige forstår dem.

En ofte brugt ting kan vi se i dette eksempel:
JMenu filerMenu = new JMenu();  
menuBar.add(filerMenu);        // indsætter fil-menuen på menubaren
Her laver vi et objekt af JMenu, filerMenu, som indsættes på menubaren - menuBar, et objekt af klassen JMenuBar. Vi laver filerMenu-objektet for sig selv, og indsætter det derefter på menubaren. En anden måde vi kunne gøre det på er vist i det følgende eksempel.
menuBar.add(new JMenu());
Her laver vi et JMenu objekt, og indsætter det i parametren til menuBar. På denne måde har vi ikke en reference til JMenu-objektet, hvilket ikke er det bedste at gøre, hvis man vil lave noget videre med objektet. På den anden side, hvis man ikke behøvede at gøre det, er det en genvej, som desuden er meget brugt, idet det er ligegyldigt med referencen til objektet. Hvis det derimod var vigtigt med referencen til objektet, kunne vi istedet gøre følgende.
JMenu filerMenu;
menuBar.add(filerMenu = new JMenu());
Dette eksempel virker på samme måde som det første, idet vi får referencen til filerMenu ved at erklære en variabel af klassen JMenu og derefter i parameteren til menuBar laver vi objektet. Det er nødvendigt at erklære variablen, da man ikke kan erklære den inde i parameter-listen. Vi kan nu se på et lidt mere komplekst eksempel.
JPanel pane = new JPanel();

pane.setBorder(BorderFactory.createTitledBorder(
  BorderFactory.createEtcedBorder(Color.red, Color.blue), "Dette er titlen"));
Her laver vi et panel og sætter kanten. 'BorderFactory' er en klasse, der indeholder flere forskellige static metoder, som hver især returnerer en kant. Her laver vi en kant med en titel. Metoden 'createTitledBorder' er i Java's dokumentation dokumenteret således:
createTitledBorder

public static TitledBorder createTitledBorder(Border border,
                                              String title)


Adds a title to an existing border, specifying the text of the title, using the
default positioning (sitting on the top line) and default justification (leading)
and using the default font and text color determined by the current look and feel.

Parameters:

border - the Border object to add the title to
title - a String containing the text of the title

Returns:

the TitledBorder object
Dette er dog kun én af de flere overloadede createTitledBorder metoder. Den returnerer et Border-objekt. Som du kan se accepterer denne version af metoden et Border-objekt og en tekst-streng, som bliver teksten på kanten. I vores eksempel laver vi i den første parameter en kant lavet med den statiske metode createEtcedBorder, som igen accepterer - i denne version (Java har mange overloadede metoder i sine utallige klasser og interfaces) - et Color objekt, som er den farve, der bliver brugt som fremhævningen på kanten, mens den anden parameter et den farve, der bliver brugt som skyggen på kanten. Da 'Color.red' og 'Color.blue' begge er farve-konstanter, bruger vi dem som farvene. Der hvor der står "Dette er titlen" er som du nok kan gætte titlen på kanten, som bliver vist; altså 'createTitledBorder's anden parameter. Alt dette bliver sendt til setBorder-metoden, som acceptererer et Border-objekt. På denne måde kan man kombinere flere kanter på en smart måde. Vi vil nu se på endnu et smart Java-trick, som også er meget brugt. Fx.:
JRootPane rootPane = new JRootPane();
rootPane.getContentPane().setLayout(new BoxLayout());
Her laver vi et objekt af JRootPane. Men det er ikke det interessante ved eksemplet. Metoden getContentPane returnerer det område hvor komponenterne er; altså uden titelbaren. Med den reference kalder vi metoden setLayout, som afgør hvilken layout manager rootPane skal have. I parameteren gør vi brug af det andet trick, som vi fandt ud af før. Vi laver nemlig et nyt BoxLayout objekt. Dette er en anden også meget brugt måde at skrive kode på.

Anonyme klasser

En mere avanceret teknik i Java er anonyme klasser. Det er klasser, som bliver lavet i en at argument til en metode. Den klasse, der bliver sendt som argument til metoden skal være nedarvet fra en anden klasse eller implementere et interface. Hvis vi havde en klasse, der bliver sendt som argument, og den klasse implementerer et interface, Buttons, kunne vi skrive det sådan her (addButton-metoden kræver en reference til et Buttons-objekt):
btnGroup1.addButton(new Buttons() {
                      // variabler og metoder af klassen
                    });
Husk at der skal være semikolon efter klassen, da det er en sætning som alle andre. Anonyme klasser kan ikke have et navn, og derfor kan man heller ikke lave contructorer i en anonym klasse. Denne måde at kalde en metode på er en noget mere avanceret teknik en det første tip i artiklen. Forskellen på de to er at her definerer vi også kroppen af klassen, som sendes til metoden, det gjorde vi ikke i det første eksempel.

Konklusion

Disse tricks til kodningen kan være smarte at kunne. De bruges også en hel del, og hvis man skal læse andres kode er det bedst at kunne disse. Eksemplet med anonyme klasser kan være svært at forstå. Det er heller ikke så nødvendigt igen, selvom det er rart at kunne det. Tricksene skal ikke bruges hvis man ikke forstår at bruge dem; i det tilfælde er det bedre bare at gå den lange vej. Men forstår man dem, er det en god idé at bruge dem, da det gør koden flottere og måske endda mere læselig, undtagen med de anonyme klasser. De kan nemt gøre koden uoverskuelig, og jeg vil ikke anbefale at bruge teknikken, hvis koden bliver ulæselig af det.


Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (2)

User
Bruger #6742 @ 01.11.04 18:53
Ak, ak.. Gør dig selv den tjeneste at lade være med at følge de tips, der gives i denne artikkel. Og her er så et godt eksempel på en næsten legendarisk anonym indre klasse:

JButton ok = new JButton("Ok");
ok.addActionListener( new ActionListener() {
public void actionPerformed ( ActionEvent e )
{
System.out.println("Klik!");
}
});
User
Bruger #5097 @ 02.03.10 21:53
Ej, undskyld det her er altså en artikel uden indhold. Der er ingen tråd igennem artiklen. Alle tips handler om vidt forskellige ting, og de står i øvrigt i alle begynder bøger. :(
Du skal være logget ind for at skrive en kommentar.
t