Ik heb pas een vraag gesteld over een grafisch venster.
Mij werdt toen aangeraden om het met Panels te doen.
Maar nu zit ik met een probleem met de menubar:
Het specificeren van een menubar gaat goed,
maar setMenuBar(); kan hij niet vinden...
Mij werdt toen aangeraden om het met Panels te doen.
Maar nu zit ik met een probleem met de menubar:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
| import java.awt.*;
import java.awt.event.*;
// Hoofdletter voor klassenaam
public class ComposeMail extends Panel
{
// Gebruik 1 declaratie per regel
private TextField toField;
private TextField fromField;
private TextArea messageField;
private MenuItem exitMenuItem;
private MenuItem sendMenuItem;
private MenuItem resetMenuItem;
private MenuItem aboutMenuItem;
private CloseAction closeAction;
public ComposeMail(Window window)
{
super(new BorderLayout());
MenuBar menuBar = new MenuBar();
Menu fileMenu = new Menu("File");
fileMenu.add(sendMenuItem = new MenuItem("Send"));
fileMenu.add(resetMenuItem = new MenuItem("Reset"));
fileMenu.add(exitMenuItem = new MenuItem("Exit"));
menuBar.add(fileMenu);
Menu aboutMenu = new Menu("Help");
aboutMenu.add(aboutMenuItem = new MenuItem("About"));
menuBar.add(aboutMenu);
//DEZE KAN NIET!!
setMenuBar(menuBar);
// assignments als parameter (expressie ) gebruiken
// is niet mooi -> aparte assignments
Button sendButton = new Button("Send");
Button resetButton = new Button("reset");
Button backButton = new Button("Go Back");
closeAction = new CloseAction(window);
// vergeet niet je ActionListeners ook toe te voegen!
sendButton.addActionListener(new SendAction());
resetButton.addActionListener(new ResetAction());
backButton.addActionListener(new GoBackAction());
sendMenuItem.addActionListener(new SendAction());
resetMenuItem.addActionListener(new ResetAction());
exitMenuItem.addActionListener(new GoBackAction());
aboutMenuItem.addActionListener(new AboutAction());
Panel p = new Panel();
p.add(sendButton);
p.add(resetButton);
p.add(backButton);
// Gebruik geen "South" maar BorderLayout.SOUTH
add(BorderLayout.SOUTH, p);
fromField = new TextField(30);
toField = new TextField(30);
// hum, dit wil je later vast een TextArea maken?
messageField = new TextArea(20,40);
Panel n = new Panel();
n.setLayout(new FlowLayout());
n.add(new Label("From:"));
n.add(fromField);
n.add(new Label("To:"));
n.add(toField);
// pack is hier niet zinvol omdat nog niet al je
// componten zijn geplaatst
// pack();
// Ook hier weer BorderLayout.NORTH ipv "North"
add(BorderLayout.NORTH, n);
add(BorderLayout.CENTER, messageField);
setBackground(Color.lightGray);
// beter: laat de layout-manager zijn werk doen:
// gebruik daarom pack() bij een Window.
// setBounds(100, 100, 400, 400);
// Visible maken in een constructor is niet handig
// en in dit geval ook niet meer mogelijk (panel).
//setVisible(true);
}
// dit is ff een makkelijke methode om een Frame te maken
public static Frame createFrame()
{
Frame frame = new Frame("E-mail composer");
ComposeMail panel = new ComposeMail(frame);
frame.addWindowListener(panel.getCloseAction());
frame.add(panel);
frame.pack();
frame.setLocation(100,100);
return frame;
}
//entry point, gewoon om ff te testen
public CloseAction getCloseAction()
{
return closeAction;
}
// liever aparte ActionListeners dan gevalsonderscheid in 1 ActionListener
class CloseAction extends WindowAdapter implements ActionListener
{
private Window window;
public CloseAction(Window window)
{
super();
this.window = window;
}
public void windowClosing(WindowEvent e)
{
window.dispose();
}
public void actionPerformed(ActionEvent event)
{
window.dispose();
}
}
class SendAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
Frame newmaill = ComposeMail.createFrame();
new SentMail();
}
}
class ResetAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
messageField.setText("");
}
}
class GoBackAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
Venster.newMail.dispose();
}
}
class AboutAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
new About();
}
}
} |
Het specificeren van een menubar gaat goed,
maar setMenuBar(); kan hij niet vinden...