Cześć.
Uczę się z w/w książki. W rozdziale dotyczącym obsługi zdarzeń w AWT zaczęły się pojawiać przykłady bez metody main.
Ponieważ to już środek książki, to sobie oczywiście tę metodę potrafię dopisać i przykłady się kompilują i działają. Zastanawiam się jednak
czy jest to zwykłe niedopatrzenie autora, czy może jednak jakoś to się sprytnie kompiluje z tego kodu bez main()?
Oto przykład kodu bez metody main (rozdz. 8, str. 360 i 361):
package button;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ButtonFrame extends JFrame
{
private JPanel buttonPanel;
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200;
public ButtonFrame()
{
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
//tworzenie przycisków
JButton yellowButton = new JButton("Żółty");
JButton blueButton = new JButton("Niebieski");
JButton redButton = new JButton("Czerwony");
//panel dla przycisków
buttonPanel = new JPanel();
//dodawanie przycisków do panelu
buttonPanel.add(yellowButton);
buttonPanel.add(blueButton);
buttonPanel.add(redButton);
add(buttonPanel);
//tworzenie obiektów akcji przycisków
ColorAction yellowAction = new ColorAction(Color.YELLOW);
ColorAction blueAction = new ColorAction(Color.BLUE);
ColorAction redAction = new ColorAction(Color.RED);
//powiązanie akcji z przyciskami
yellowButton.addActionListener(yellowAction);
blueButton.addActionListener(blueAction);
redButton.addActionListener(redAction);
}
private class ColorAction implements ActionListener
{
private Color b;
public ColorAction(Color c)
{
b = c;
}
public void actionPerformed(ActionEvent e)
{
buttonPanel.setBackground(b);
System.out.println("Naciśnięto przycisk " + e);
}
}
}
Edit.
Ja metodę main() dopisałem w klasie ButtonFrame w ten sposób:
public static void main(String a[])
{
ButtonFrame bf = new ButtonFrame();
bf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
bf.setVisible(true);
}
Czy to jest poprawnie w jakimś projektowym sensie? Kompiluje się i uruchamia.
Z góry dziękuję mądrzejszym za odpowiedź.