Grafiske brugergrænseflader II!
|
|
- Amanda Klausen
- 7 år siden
- Visninger:
Transkript
1 Grafiske brugergrænseflader II! Plan! MVC (Model View Controller)!!!- designmønsteret Observer! Iterativ udvikling af et tegneprogram!!- muselyttere!!!!!- applet/applikation-idiomet!!!- designmønsteret State!!!!- designmønsteret Factory Method! 1! 2! En grafisk brugergrænseflade til beregning! af kvadratet på et tal! public class SquareFrame extends JFrame implements ActionListener {!!private Label numberlabel, squarelabel;!!!!!private TextField numberfield, squarefield;!!public SquareFrame() {!!!!!numberlabel = new Label("Number:");!!!!!!numberField = new TextField();!!!!squareLabel = new Label("Square:");!!!!!!squareField = new TextField();!!!!!!squareField.setEditable(false);!!!!!!Container pane = getcontentpane();!!!!!pane.setlayout(new GridLayout(4, 1));!!!!pane.add(numberLabel);!!!!!!!pane.add(numberField);!!!!!!!!pane.add(squareLabel);!!!!!!!pane.add(squareField);!!!numberField.addActionListener(this);!!!!!!public void actionperformed(actionevent e) {!!!!!int number = Integer.parseInt(numberField.getText());!!!squareField.setText(Integer.toString(number * number));!!!!!!!! 3! 4!
2 Model-View-Controller (MVC)! - et arkitektonisk mønster! MVC-arkitekturen! For at gøre udskiftning af en brugergrænseflade simpel, bør brugergrænsefladen have en løs kobling med de øvrige dele af programmet.! View! Hændelser! Opdater udseende! Den fundamentale ide i MVC er at adskille data (model) fra deres grafiske præsentation (view).! Tilstandsinformation! Opdater tilstand! Controller! En brugergrænseflades controller tager sig af brugerens input (hændelser). Typisk omfatter dette ændringer i modellen.! Model! Informationsstrøm! Kommando! 5! 6! Eksempel på anvendelse af MVC! (et GUI-program, der beregner kvadratet på et tal)! Model! public class Model {! int getnumber() {! return number;! int getsquare() {! return number * number;!!!metoder:! Model:!!getNumber(), getsquare(), setnumber()! View:!!getNumber(), update()! Controller:!actionPerformed()! void setnumber(int number) {! this.number = number;! private int number;! Lav model først. Kan testes uafhængigt af brugergrænsefladen.! 7! 8!
3 View! public class View extends JFrame {! public View(Model model) {! this.model = model;! numberlabel = new Label("Number:");! numberfield = new JTextField();!...! numberfield.addactionlistener(new Controller(model, this));! Controller! public class Controller implements ActionListener {! public Controller(Model model, View view) {! this.model = model;! this.view = view;! public int getnumber() {! return Integer.parseInt(numberField.getText());! public void update() {! squarefield.settext(integer.tostring(model.getsquare()));! private Model model;!! private JTextField numberfield, squarefield;! private JLabel numberlabel, squarelabel;!! 9! public void actionperformed(actionevent e) {! model.setnumber(view.getnumber());! view.update();! private Model model;! private View view;! 10! Et hovedprogram! Observer og Observable! public class MVC {! public static void main(string args[]) {! Model model = new Model();! View view = new View(model);! view.setsize(150, 150);! view.setvisible(true);! view.setdefaultcloseoperation(view.exit_on_close);! Java understøtter brugen af MVC-konceptet igennem grænsefladen Observer og klassen Observable.! Et Observable-objekt har en metode, addobserver, som benyttes til at registrere dets Observer-objekter.! Observer-objekterne kan underrettes om ændringer ved kald af metoden notifyobservers. Disse Observerobjekter vil da få kaldt deres update-metode.! 11! 12!
4 Observer og Observable! java.util.*! Anvendelse af! Observer/Observable! public interface Observer {! void update(observable obj, Object arg);! public class Observable {! public void addobserver(observer obj);! public void setchanged();! public void notifyobservers();! public void notifyobservers(object arg);! Model:! View:! Controller:!extends Observable!!implements Observer!!implements ActionListener! 13! 14! Programstruktur! Model! JFrame! Observer! update! Observable! ActionListener! public class Model extends Observable {! public int getnumber() {! return number;! View! update! model! observer! Model! model! Controller! public int getsquare() {! return number * number;! public int setnumber(int number) {! this.number = number;! setchanged();! notifyobservers();! private int number;! 15! 16!
5 View! public class View extends JFrame implements Observer {! public View(Model model) {! this.model = model;! model.addobserver(this);! numberfield = new JTextField();!...! numberfield.addactionlistener(new Controller(model));! public void update(observable obj, Object arg) {! squarefield.settext(integer.tostring(model.getsquare()));! private Model model;! private TextField numberfield, squarefield;! private Label numberlabel, squarelabel;! Controller! public class Controller implements ActionListener {! private Model model;! public Controller(Model model) {! this.model = model;! public void actionperformed(actionevent e) {! JTextField numberfield = (JTextField) e.getsource();! model.setnumber(integer.parseint(numberfield.gettext()));! 17! 18! View og Controller i en og samme klasse! (model-delegate arkitektur)! Eksempel på anvendelse af model-delegate! (visning af et heltal med to views)! public class View extends JFrame implements Observer, ActionListener {! public View(Model model) {!...! numberfield.addactionlistener(this);! public void actionperformed(actionevent e) {! model.setnumber(integer.parseint(numberfield.gettext());! public void update(observable obj, Object arg) {! squarefield.settext(integer.tostring(model.getsquare()));! private Model model;! private TextField numberfield, squarefield;! private Label numberlabel, squarelabel;! ValueModel!extends Observable! TextDelegate!implements Observer, ActionListener SliderDelegate!implements Observer, ChangeListener! 19! 20!
6 class ValueModel extends Observable {! private int value;! ValueModel! public void setvalue(int value) {! this.value = value;! setchanged();! notifyobservers();! public int getvalue() {! return value;! 21! class TextDelegate extends JTextField! implements Observer, ActionListener {! private ValueModel model;! TextDelegate! public TextDelegate(ValueModel model) {! this.model = model;! model.addobserver(this);! addactionlistener(this);! public void actionperformed(actionevent evt) {! model.setvalue(integer.parseint(gettext()));! public void update(observable obj, Object arg) {! if (obj == model)! settext(integer.tostring(model.getvalue()));! 22! class SliderDelegate extends JSlider! implements Observer, ChangeListener {! private ValueModel model;! SliderDelegate! public SliderDelegate(ValueModel model) {! super(0, 100, model.getvalue());! this.model = model;! model.addobserver(this);! addchangelistener(this);! public void statechanged(changeevent evt) {! model.setvalue(getvalue());! public void update(observable obj, Object arg) {! if (obj == model)! setvalue(model.getvalue());! 23! public class MDFrame extends JFrame {! public MDFrame() {! ValueModel model = new ValueModel();!! Container pane = getcontentpane();! pane.add(new TextDelegate(model), BorderLayout.NORTH);! pane.add(new SliderDelegate(model), BorderLayout.SOUTH);! setsize(200, 80);! setvisible(true);! setdefaultcloseoperation(exit_on_close);! MDFrame! public static void main(string[] args) {! new MDFrame();! 24!
7 Designmønsteret Observer! Kategori:!!!!!!!!Adfærdsmæssigt designmønster! Struktur:! Designmønsteret Observer! (fortsat)! Hensigt:!!!!!!!!At definere en en-til-mange-relation imellem objekter, således at når!et objekt ændrer tilstand, vil alle dets afhængige objekter blive notificeret!og opdateret automatisk! Anvendelse:!!Når en abstraktion har to sider, hvoraf den ene er afhængig af den anden!!når en ændring i et objekt kræver ændringer i andre objekter, og deres!antal er ukendt!!når et objekt skal kunne notificere andre objekter uden at kende dem! Andre navne:!!!!!!!!publish-subscribe! Subject! attach(observer)! detach(observer)! notify()! ConcreteSubject! getstate()! setstate()! subjectstate! observers! for all o in observers! o.update()! return subjectstate! subject! Observer! update()! ConcreteObserver! update()! observerstate! observerstate =! subject.getstate()! 25! 26! Designmønsteret Observer! (fortsat)! Lyttere og kilder! Deltagere:!!!!!!!!!!!!!!!!!!Subject, der kender sine Observer-objekter og definerer en grænseflade for!tilknytning og løsrivelse af Observer-objekter!!!!!!!!!!!Observer, der definerer en grænseflade for objekter, der skal underrettes om!ændringer i et Subject!!!!!!!!!!!!ConcreteSubject, der indeholder den tilstand, der har interesse for!!concreteobserver-objekter, og som sender besked til sine Observer-!objekter, når dets tilstand ændres!!!!!!!!!!!!!concreteobserver, der har en reference til et ConcreteSubject-objekt og!implementerer en update-metode! Swings hændelsesmodel benytter Observer-designmønsteret! med typificerede notifikations-objekter (Event-objekter).! Lytterne er observers.! Kilderne er observable.! 27! 28!
8 Brug af MVC! Iterativ udvikling!!giver stor fleksibilitet, men på bekostning af!!større kodemængde!!ofte slås controller og view sammen!!!(model-delegate arkitektur)! En Swing-komponent:! Model! Component! View! Controller! UI-delegate! Udviklingsprocessen foregår i iterationer.! Hver iteration er baseret på resultatet af den forrige iteration.! Hver iteration resulterer i et fuldt funktionelt mellemprodukt.! 29! 30! Iterativ udvikling af et tegneprogram! Iteration 1! 1. Et simpelt program til skitsetegning i et givet tegneområde.! 2. Muliggør intern og ekstern lagring af tegninger! samt valg af penfarve.! 3. Faktorisering med henblik på udvidelse.! 4. Muliggør tegning af linjestykker, rektangler og ovaler.! 5. Muliggør tegning af udfyldte rektangler og ovaler.! 6. Muliggør tilføjelse af tekst via tastaturet.! 31! 32!
9 Programstruktur! (iteration 1)! Klassen ScribbleCanvas! JApplet! Scribble! JPanel! ScribbleCanvas! EventListener! MouseListener! MouseMotionListener! import java.awt.*;! import java.awt.event.*;! import java.util.eventlistener;! import javax.swing.*;! public class ScribbleCanvas extends JPanel {! public ScribbleCanvas() {! listener = new ScribbleCanvasListener(this);! addmouselistener((mouselistener) listener);! addmousemotionlistener((mousemotionlistener) listener);! ScribbleCanvasListener! protected EventListener listener;! protected boolean mousebuttondown = false;! protected int x, y;! 33! 34! public class ScribbleCanvasListener! implements MouseListener, MouseMotionListener {! public ScribbleCanvasListener(ScribbleCanvas canvas) {! this.canvas = canvas;! Klassen ScribbleCanvasListener! //... mousepressed, mousedragged, mousereleased! public void mouseclicked(mouseevent e) { public void mouseentered(mouseevent e) { public void mouseexited(mouseevent e) { public void mousemoved(mouseevent e) { protected ScribbleCanvas canvas;! public void mousepressed(mouseevent e) {!!Point p = e.getpoint();!!!!canvas.x = p.x;!!! mousepressed!!!canvas.y = p.y;!!!!!canvas.mousebuttondown = true;! mousedragged! public void mousedragged(mouseevent e) {!!if (canvas.mousebuttondown) {!!! Point p = e.getpoint();!!! canvas.getgraphics().!!!! drawline(canvas.x, canvas.y, p.x, p.y);!! canvas.x = p.x;!!!! canvas.y = p.y;!!!!!!!!!! public void mousereleased(mouseevent e) {!!canvas.mousebuttondown = false;!! mousereleased! Alternativ: brug klassen MouseInputAdapter fra Swing! fortsættes! 35! Brug af mousebuttondown er overflødig! 36!
10 Klassen Scribble! (applet)! Klassen Scribble! (applet/application)! public class Scribble extends JApplet {! public Scribble() {! canvas = new ScribbleCanvas();! canvas.setbackground(color.white);!!!! getcontentpane().setlayout(new BorderLayout());! getcontentpane().add(canvas, BorderLayout.CENTER);! protected ScribbleCanvas canvas;! public class Scribble extends JApplet {! public Scribble() {! canvas = new ScribbleCanvas()! canvas.setbackground(color.white);!!!! getcontentpane().setlayout(new BorderLayout());! getcontentpane().add(canvas, BorderLayout.CENTER);!! public static void main(string[] args) {... protected ScribbleCanvas canvas;! fortsættes! 37! 38! Metoden main i Scribble! Idiom til at gøre et program til både en applet og en applikation! public static void main(string[] args) {!!!!int width = 600, height = 400;! JFrame frame = new JFrame("Scribble Pad");! frame.getcontentpane().add(new Scribble());! frame.setsize(width, height);!!dimension screensize = Toolkit.getDefaultToolkit().!! getscreensize();!!frame.setlocation(screensize.width / 2 - width / 2,!! screensize.height / 2 - height / 2);!! frame.setvisible(true);! public class DualAppletApp extends JApplet {! protected boolean isapplet;! public DualAppletApp() {! this(true);! private DualAppletApp(boolean isapplet) {! this.isapplet = isapplet;! //... general constructor stuff goes here! if (!isapplet) {! init();! start();! public static void main(string[] args) {... fortsættes! 39! 40!
11 public static void main(string[] args) {! JFrame frame = new JFrame();! frame.settitle(title);! frame.getcontentpane().setlayout(new BorderLayout());! frame.getcontentpane().add(! new DualAppletApp(false), BorderLayout.CENTER);! frame.addwindowlistener(new FrameListener);! frame.setsize(width, height);! frame.pack();! frame.setvisible(true);! FrameListener kan f.eks. være!!windowadapter() {!! public void windowclosing(windowevent e) {!! System.exit(0);!!! Iteration 2! (menuer, dialoger og filer)! Tilføjer følgende funktionalitet:! Intern lagring af tegninger (så de kan gentegnes, f.eks. hvis vinduesstørrelsen ændres)! Ekstern lagring af tegninger (i filer)! Mulighed for valg af penfarve! Valg foretages ved hjælp af menuer og dialoger.! 41! 42! Iteration 2! Pennestrøg! En tegning lagres i følgende struktur:! 2 strøg!!hver tegning består af en liste af pennestrøg (strokes)!!hvert pennestrøg består af en liste af punkter og!!den anvendte penfarve! 43! 44!
12 Programstruktur! (iteration 2)! Klassen Stroke! JFrame! Scribble! Serializable! JPanel! ScribbleCanvas! EventListener! *! Stroke! MouseListener! MouseMotionListener! public class Stroke implements Serializable {! public Stroke() { public Stroke(Color color) { this.color = color; public void setcolor(color color) { this.color = color; public Color getcolor() { return color; public List<Point> getpoints() { return points; public void addpoint(point p) { points.add(p); *! Point! ScribbleCanvasListener! protected List<Point> points = new ArrayList<Point>();! protected Color color = Color.black;! 45! 46! Klassen ScribbleCanvas! public class ScribbleCanvas extends JPanel {! public ScribbleCanvas() {... public void setcurcolor(color curcolor) {... public Color getcurcolor(); {... public void startstroke(point p) {... public void addpointtostroke(point p) {... public void endstroke(point p) {... public void paint(graphics g) {... public void savefile(string filename) {... public void openfile(string filename) {... public void newfile() {... public void setcurcolor(color curcolor) {!!this.curcolor = curcolor;!!!!!!!!!!!!! public Color getcurcolor() { return curcolor; public void startstroke(point p) {!!!curstroke = new Stroke(curColor);!!!curStroke.addPoint(p);! public void addpointtostroke(point p) {!!if (curstroke!= null)!!!! curstroke.addpoint(p);! protected EventListener listener;! protected int x, y;! protected List<Stroke> Strokes = new ArrayList<Stroke>();! protected Stroke curstroke = null;! protected Color curcolor = Color.black;! public void endstroke(point p) {!!!if (curstroke!= null) {!!!! curstroke.addpoint(p);!!! strokes.add(curstroke);!!! curstroke = null;!!!!!!! 47! 48!
13 public void paint(graphics g) {! Dimension dim = getsize();! g.setcolor(color.white);! g.fillrect(0, 0, dim.width, dim.height);! for (Stroke stroke : strokes) {! g.setcolor(stroke.getcolor());! Point prev = null;! for (Point cur : stroke.getpoints()) {! if (prev!= null)! g.drawline(prev.x, prev.y, cur.x, cur.y);! prev = cur;! public void savefile(string filename) {! try {! ObjectOutputStream out = new ObjectOutputStream(! new FileOutputStream(filename));! out.writeobject(strokes);! out.close();! System.out.println("Save drawing to " + filename);! } catch (IOException e) {! System.out.println("Unable to write file: " + filename);! 49! 50! public void openfile(string filename) {! try {! ObjectInputStream in = new ObjectInputStream(! new FileInputStream(filename));! strokes = (List) in.readobject();! in.close();! repaint();! } catch (IOException e1) {! System.out.println("Unable to open file: " + filename);! } catch (ClassNotFoundException e2) {! System.out.println(e2);! Klassen ScribbleCanvasListener! public class ScribbleCanvasListener extends MouseInputAdapter {! public ScribbleCanvasListener(ScribbleCanvas canvas) {! this.canvas = canvas;! // mousepressed, mousedragged, mousereleased! protected ScribbleCanvas canvas;! public void newfile() {! strokes.clear();! repaint();! 51! 52!
14 public void mousepressed(mouseevent e) {!!Point p = e.getpoint();!! mousepressed!!!canvas.x = p.x;!!!!!canvas.y = p.y;!!!! mousedragged!!canvas.startstroke(p);! public void mousedragged(mouseevent e) {!!Point p = e.getpoint();!!!canvas.getgraphics().!!!!drawline(canvas.x, canvas.y, p.x, p.y);!!canvas.x = p.x;!!!!!canvas.y = p.y;!!!!canvas.addpointtostroke(p);!! public void mousereleased(mouseevent e) {!!Point p = e.getpoint();!!!!canvas.endstroke(p);!!!! mousereleased! public class Scribble extends JFrame {! public Scribble() {! settitle("scribble Pad");!!!! getcontentpane().setlayout(new BorderLayout());! getcontentpane().add(createmenubar(), BorderLayout.NORTH);! canvas = new ScribbleCanvas();! getcontentpane().add(canvas, BorderLayout.CENTER);! addwindowlister(new WindowAdapter() {! public void windowclosing(windowevent e) {! exitaction.actionperformed(! new ActionEvent(Scribble.this, 0, null));! });!!... // methods (including main) and inner classes! protected ScribbleCanvas canvas;! protected String currentfilename;! protected ActionListener exitaction;! protected JFileChooser chooser = new JFileChooser(".");! 53! 54! Ændringer i applikationen! Nye metoder:!!createmenubar()!!newfile()!!openfile()!!savefile()!!savefileas()! Indlejrede lytterklasser:!!newfilelistener!!openfilelistener!!savefilelistener!!saveasfilelistener!!exitlistener!!colorlistener!!aboutlistener! protected JMenuBar createmenubar() {! JMenuBar menubar = new JMenuBar();! JMenu menu;! JMenuItem mi;! // File menu! menu = new JMenu("File");! menubar.add(menu);! mi = new JMenuItem("New");! menu.add(mi);! mi.addactionlistener(new NewFileListener());! mi = new JMenuItem("Open");! menu.add(mi);! mi.addactionlistener(new OpenFileListener());! mi = new JMenuItem("Save");! menu.add(mi);! mi.addactionlistener(new SaveFileListener());! 55! mi = new JMenuItem("Save As");! menu.add(mi);! mi.addactionlistener(new SaveAsFileListener());! menu.add(new JSeparator());! 56!
15 exitaction = new ExitListener();! mi = new JMenuItem("Exit");! menu.add(mi);! mi.addactionlistener(exitaction);! // option menu! menu = new JMenu("Option");! menubar.add(menu);! mi = new JMenuItem("Color");! menu.add(mi);! mi.addactionlistener(new ColorListener());! // horizontal space! menubar.add(box.createhorizontalglue());! // Help menu! menu = new JMenu("Help");! menubar.add(menu);! mi = new JMenuItem("About");! menu.add(mi);! mi.addactionlistener(new AboutListener());! return menubar;! 57! protected void newfile() {! currentfilename = null;! canvas.newfile();! settitle("scribble Pad");! protected void openfile(string filename) {! currentfilename = filename;! canvas.openfile(filename);! settitle("scribble Pad [" + currentfilename + "]");! protected void savefile() {! if (currentfilename == null)! currentfilename = "Untitled";! canvas.savefile(currentfilename);! settitle("scribble Pad [" + currentfilename + "]");! protected void savefileas(string filename) {! currentfilename = filename;! canvas.savefile(filename);! settitle("scribble Pad [" + currentfilename + "]");! 58! class ExitListener implements ActionListener {! public void actionperformed(actionevent e) {! int result = JOptionPane.showConfirmDialog(null,! "Do you want to exit Scribble Pad?",! "Exit Scribble Pad?",! JOptionPane.YES_NO_OPTION);! if (result == JOptionPane.YES_OPTION) {! savefile();! System.exit(0);! class AboutListener implements ActionListener {! public void actionperformed(actionevent e) {! JOptionPane.showMessageDialog(null,! "DrawingPad version 1.0\nCopyright (c) Xiaoping Jia 2002",! "About",! JOptionPane.INFORMATION_MESSAGE);! 59! 60!
16 class OpenFileListener implements ActionListener {! public void actionperformed(actionevent e) {! int retval = chooser.showdialog(null, "Open");! if (retval == JFileChooser.APPROVE_OPTION) {! File thefile = chooser.getselectedfile();! if (thefile!= null && thefile.isfile())! String filename = thefile.getabsolutepath();! openfile(filename);! 61! class SaveAsFileListener implements ActionListener {! public void actionperformed(actionevent e) {! int result = chooser.showdialog(null, "Save As");! if (result == JFileChooser.APPROVE_OPTION) {! File thefile = chooser.getselectedfile();! if (thefile!= null &&!thefile.isdirectory()) {! String filename = thefile.getabsolutepath();! savefileas(filename);!! 62! class NewFileListener implements ActionListener {! public void actionperformed(actionevent e) {! newfile();! class SaveFileListener implements ActionListener {! public void actionperformed(actionevent e) {! savefile();! class ColorListener implements ActionListener {! public void actionperformed(actionevent e) {! Color result = dialog.showdialog();! if (result!= null)! canvas.setcurcolor(result);! protected ColorDialog dialog =! new ColorDialog(Scribble.this,! "Choose color",! canvas.getcurcolor());! 63! 64!
17 public class ColorDialog extends JDialog implements ActionListener {! public ColorDialog(JFrame owner, String title, Color color) {... public Color showdialog() {... public void actionperformed(actionevent e) {... protected JButton okbutton;! protected JButton cancelbutton;! protected JButton morecolorbutton;! protected ColorPanel colorpanel;! protected JColorChooser chooser = new JColorChooser();! protected Color color, result;! class ColorPanel extends JPanel {... Implementation: se bogen! 65! 66! En simpel ColorListener! class ColorListener implements ActionListener {! public void actionperformed(actionevent e) {! Color result = JColorChooser.showDialog(! Scribble.this, "Choose color", Color.BLACK);! if (result!= null)! canvas.setcurcolor(result);! 67! 68!
18 Iteration 3! faktorisering for at opnå udvidelighed! Programstruktur! (iteration 3)! Scribble! ScribbleCanvas! ScribbleCanvasListener! (1) Indførelse af en form (Shape), hvor et strøg er et særtilfælde.! Serializable! *! Shape! 1! Tool! (2) Indførelse af et værktøj (Tool), der for hver mulig form reagerer på brugerhandlinger med musen.! Stroke! AbstractTool! *! Funktionaliteten er den samme som for iteration 2! Point! ScribbleTool! 69! 70! public class Stroke extends Shape {! public Stroke() { public Stroke(Color color) { super(color); public abstract class Shape implements Serializable {! public Shape() { public Shape(Color color) { this.color = color; public void setcolor(color color) { this.color = color; public Color getcolor() { return color; public abstract void draw(graphics g);! protected Color color = Color.black;! Bemærk brugen af designmønsteret Strategy.! Shape er en abstrakt strategi, Stroke en konkret strategi.! public List<Point> getpoints() { return points; public void addpoint(point p) { points.add(p); public void draw(graphics g) {! if (color!= null)! g.setcolor(color);! Point prev = null;! for (Point cur : points) {! if (prev!= null)! g.drawline(prev.x, prev.y, cur.x, cur.y);! prev = cur;! protected List<Point> points = new ArrayList<Point>();! // color and associate methods moved to the superclass Shape! 71! 72!
19 Hvorledes håndteres flere værktøjer?! En mulighed er at vedligeholde en heltalsvariabel, currenttool, der kan antage en af følgende værdier:! public static final int SCRIBBLE_TOOL = 0;! public static final int LINE_TOOL = 1;! public static final int RECTANGLE_TOOL = 2;!! public static final int OVAL_TOOL = 3;! Alternativt benytte Java 5.0 s typesikre enum-konstruktion:! public enum ToolType { SCRIBBLE_TOOL, LINE_TOOL,! RECTANGLE_TOOL, OVAL_TOOL };! mousepressed, mousedragged og mousereleased i klassen ScribbleCanvasListener ændres, så de får følgende struktur:! Point p = e.getpoint();! switch (ScribbleCanvas.getCurrentTool()) {! case ScribbleCanvas.SCRIBBLE_TOOL:! //...! break;! case ScribbleCanvas.LINE_TOOL:! //...! break;! case ScribbleCanvas.RECTANGLE_TOOL:! //...! break;! case ScribbleCanvas.OVAL_TOOL:! //...! break;! java.sun.com/j2se/1.5.0/docs/guide/language/enums.html! 73! 74! En bedre løsning! Førnævnte løsning er ufleksibel.! En bedre løsning er at indkapsle adfærden for hvert værktøj i en særskilt klasse.! Som fælles grænseflade for værktøjerne defineres!!!!!!!!!!!!public interface Tool {!!!!!! String getname();!!!!!!! void startshape(point p);!!!!! void addpointtoshape(point p);!!!!! void endshape(point p);!! 75! public abstract class AbstractTool implements Tool {! protected AbstractTool(ScribbleCanvas canvas, String name) {! this.canvas = canvas;! this.name = name;! public String getname() {! return name;! protected ScribbleCanvas canvas;! protected String name;! Bemærk brugen af designmønsteret Strategy.! AbstractTool er en abstrakt strategi, ScribbleTool en konkret strategi.! 76!
20 public class ScribbleTool extends AbstractTool {! public ScribbleTool(ScribbleCanvas canvas, String name) {! super(canvas, name);! public void startshape(point p) {! curstroke = new Stroke(canvas.getCurColor());! curstroke.addpoint(p);! public void addpointtoshape(point p) {! if (curstroke!= null) {! curstroke.addpoint(p);! Graphics g = canvas.getgraphics();! g.setcolor(canvas.getcurcolor());! g.drawline(canvas.x, canvas.y, p.x, p.y);! public void endshape(point p) {! if (curstroke!= null) {! curstroke.addpoint(p);! canvas.addshape(curstroke);! curstroke = null;! protected Stroke curstroke;! 77! Ændringer i ScribbleCanvasListener! public void mousepressed(mouseevent e) {!!! Point p = e.getpoint();!!!! canvas.x = p.x; canvas.y = p.y;!! tool.startshape(p);!!! public void mousedragged(mouseevent e) {!!!!! Point p = e.getpoint();!!canvas.getgraphics().drawline(canvas.x, canvas.y, p.x, p.y);!!canvas.x = p.x; canvas.y = p.y;!!tool.addpointtoshape(p);!!!!!!! public void mousereleased(mouseevent e) {! Point p = e.getpoint();!!tool.endshape(p);!! protected Tool tool;! 78! Ændringer i Scribble! public class Scribble extends JFrame {! public Scribble(String title) {! super(title);! // calling the factory method! canvas = makecanvas();!...!!! // the factory method! protected ScribbleCanvas makecanvas() {! return new ScribbleCanvas();! Ændringer i ScribbleCanvas! public class ScribbleCanvas extends JPanel {! public ScribbleCanvas() {! // calling factory method! listener = makecanvaslistener();!...! // factory method! protected EventListener makecanvaslistener() {! return new ScribbleCanvasListener(this);! public void paint(graphics g) {!...! for (Shape shape : shapes)!! shape.draw(g);!...! List<Shape> shapes = new ArrayList<Shape>();!...! 79! 80!
21 Iteration 4! Programstruktur! (iteration 4, formerne)! Serializable! ScribbleCanvas! *! Shape! DrawingCanvas! Stroke! TwoEndsShape! LineShape! RectangleShape! OvalShape! 81! 82! (x2, y2)! (x2, y2)! (x1, y1)! public abstract class TwoEndsShape extends Shape! implements Cloneable {! public TwoEndsShape() { public TwoEndsShape(Color color) { super(color); public void setends(int x1, int y1, int x2, int y2) {! this.x1 = x1; this.y1 = y1;! this.x2 = x2; this.y2 = y2;! public class LineShape extends TwoEndsShape {! public void draw(graphics g) {! g.setcolor(color);! g.drawline(x1, y1, x2, y2);! (x1, y1)! public Object clone() throws CloneNotSupportedException {! return super.clone();! abstract public void drawoutline(graphics g,! int x1, int y1,! int x2, int y2);! public void drawoutline(graphics g,! int x1, int y1, int x2, int y2) {! g.drawline(x1, y1, x2, y2);! protected int x1, y1, x2, y2;! 83! 84!
22 (x2, y2)! (x2, y2)! public class RectangleShape extends TwoEndsShape {! public void draw(graphics g) {! int x = Math.min(x1, x2);! int y = Math.min(y1, y2);! int w = Math.abs(x2 - x1) + 1;! int h = Math.abs(y2 - y1) + 1;! g.setcolor(color);! g.drawrect(x, y, w, h);! public void drawoutline(graphics g,! int x1, int y1,! int x2, int y2) {! int x = Math.min(x1, x2);! int y = Math.min(y1, y2);! int w = Math.abs(x2 - x1) + 1;! int h = Math.abs(y2 - y1) + 1;! g.drawrect(x, y, w, h);! x1! (x1, y1)! w = x2 - x1 + 1! x2! public class OvalShape extends TwoEndsShape {! public void draw(graphics g) {! int x = Math.min(x1, x2);! int y = Math.min(y1, y2);! int w = Math.abs(x1 - x2) + 1;! int h = Math.abs(y1 - y2) + 1;! g.setcolor(color);! g.drawoval(x, y, w, h);! public void drawoutline(graphics g,! int x1, int y1,! int x2, int y2) {! int x = Math.min(x1, x2);! int y = Math.min(y1, y2);! int w = Math.abs(x1 - x2) + 1;! int h = Math.abs(y1 - y2) + 1;! g.drawoval(x, y, w, h);! (x1, y1)! 85! 86! Programstruktur! (iteration 4, værktøjerne)! public class ToolKit {! protected List<Tool> tools = new ArrayList<Tool>();! protected Tool selectedtool;! Scrible! public void addtool(tool tool) { tools.add(tool); public int gettoolcount() { return tools.size(); DrawingPad1! 1! Toolkit! tools! *! Tool! public Tool gettool(int i) { return tools.get(i); 1! selectedtool! AbstractTool! TwoEndsTool! ScribbleTool! public Tool getselectedtool() { return selectedtool; public void setselectedtool(tool tool) { selectedtool = tool; public void setselectedtool(int i) {! Tool tool = gettool(i);! if (tool!= null)! selectedtool = tool;! fortsættes! 87! 88!
23 Designmønsteret State! public Tool findtool(string name) {! for (Tool tool : tools)! if (tool.getname().equals(name)))! return tool;! return null;! public Tool setselectedtool(string name) {! Tool tool = findtool(name);! if (tool!= null)! selectedtool = tool;! return tool;! Kategori:!!!!!!!!Adfærdsmæssigt designmønster! Hensigt:!!!!!!!!At gøre det muligt, at et objekt kan ændre adfærd, når dets interne!!tilstand ændres.! Anvendelse:!!Når et objekts adfærd afhænger at dets tilstand, og det må ændre!!adfærd på kørselstidspunktet, når dets tilstand ændres (f.eks. når et!!nyt værktøj vælges)!!metoder har betingede flervejssætninger, der afhænger af objektets!tilstand (f.eks. switch-sætninger i ScribbleCanvasListener).! 89! Andre navne:!!!!!!!!objects for states! 90! Struktur:! Context! request()! Designmønsteret State! (fortsat)! state! 1! State! handle()! Deltagere:! Designmønsteret State! (fortsat)! Context (f.eks. Toolkit), der har en instans af ConcreteState, der! definerer den aktuelle tilstand (f.eks. selectedtool-feltet i Toolkit)! state.handle()! ConcreteStateA! handle()! ConcreteStateB! handle()! State (f.eks. Tool), der definerer en grænseflade til indkapsling af adfærden knyttet til en given tilstand for Context! ConcreteState (f.eks. ScribbleTool), hvor hver underklasse implementerer en adfærd (f.eks. startshape)! 91! 92!
24 public class TwoEndsTool extends AbstractTool {! public static final int LINE = 0, OVAL = 1, RECT = 2;! public TwoEndsTool(ScribbleCanvas canvas, String name, int shape) {! super(canvas, name);! this.shape = shape;! public void startshape(point p) {... public void addpointtoshape(point p) {... public void endshape(point p) {... protected int shape = LINE;! protected int xstart, ystart;! // helper methods! private static void drawline(graphics g,! int x1, int y1, int x2, int y2) {... private static void drawrect(graphics g,! int x, int y, int w, int h) {... private static void drawoval(graphics g,! int x, int y, int w, int h) {... public void startshape(point p) {! xstart = canvas.x = p.x;! ystart = canvas.y = p.y;! Graphics g = canvas.getgraphics();!!! g.setcolor(color.lightgray);! switch (shape) {! case LINE:! drawline(g, xstart, ystart, xstart, ystart);!! break;! case OVAL:! drawoval(g, xstart, ystart, 1, 1);!! break;! case RECT:! drawrect(g, xstart, ystart, 1, 1);! 93! 94! public void addpointtoshape(point p) {! Graphics g = canvas.getgraphics();! g.setxormode(color.white);! g.setcolor(color.lightgray);! switch (shape) {! case LINE:! drawline(g, xstart, ystart, canvas.x, canvas.y);! drawline(g, xstart, ystart, p.x, p.y);! break;! case OVAL:! drawoval(g, xstart, ystart,! canvas.x - xstart + 1, canvas.y - ystart + 1);! drawoval(g, xstart, ystart,! p.x - xstart + 1, p.y - ystart + 1);! break;! case RECT:! drawrect(g, xstart, ystart,! canvas.x - xstart + 1, canvas.y - ystart + 1);! drawrect(g, xstart, ystart,! p.x - xstart + 1, p.y - ystart + 1);! canvas.x = p.x;! canvas.y = p.y;! public void endshape(point p) {! TwoEndsShape newshape = null;! switch (shape) {! case LINE:! newshape = new LineShape();! break;! case OVAL:! newshape = new OvalShape();! break;! case RECT:! newshape = new RectangleShape();! newshape.setcolor(canvas.getcurcolor());! newshape.setends(xstart, ystart, p.x, p.y);! canvas.addshape(newshape);! Graphics g = canvas.getgraphics();! g.setpaintmode();! canvas.repaint();! 95! 96!
25 h! w! (x,y)! Programstruktur! (iteration 4, overordnet)! private static void drawline(graphics g,! int x1, int y1, int x2, int y2) {! g.drawline(x1, y1, x2, y2);! private static void drawrect(graphics g,! int x, int y, int w, int h) {! if (w < 0) { x = x + w; w = -w; if (h < 0) { y = y + h; h = -h; g.drawrect(x, y, w, h);! private static void drawoval(graphics g,! int x, int y, int w, int h) {! if (w < 0) { x = x + w; w = -w; if (h < 0) { y = y + h; h = -h; g.drawoval(x, y, w, h);! Scribble! Scrible()!...! makecanvas()!...! ScribbleCanvas! ScribbleCanvas()!...! makecanvaslistener()!...! ScribbleCanvasListener! DrawingPad1! makecanvas()! DrawingCanvas! makecanvaslistener()! DrawingCanvasListener! 97! Nedarvning! 98! Designmønsteret Factory Method! Kategori:!!!!!!!Konstruerende designmønster! Struktur:! Designmønsteret Factory Method! (fortsat)! Hensigt:!!!!!!!At definere en grænseflade til skabelse af et objekt, men lade!underklasserne bestemme fra hvilken klasse, det skal skabes! Anvendelse:!!Når en klasse ikke kan forudse, hvilken type objekt, den skal skabe!!!når en klasse ønsker, at dens underklasser skal afgøre, hvilke!!!objekter, der skal skabes! Product! ConcreteProduct! Creator! factorymethod()! anoperation()! ConcreteCreator! factorymethod()!...! product = factorymethod()!...! Andre navne:!!!!!!!virtual constructor! return new ConcreteProduct()! 99! 100!
26 Designmønsteret Factory Method! (fortsat)! Deltagere:!!!!!!!!!! Product (f.eks. EventListener), der definerer en grænseflade for de! objekter, factory-metoden skaber! ConcreteProduct (f.eks. DrawingCanvasListener), der implementerer Product-grænsefladen!!!!!!!!!! Creator (f.eks. Scribble), som erklærer en eller flere factory-metoder! (f.eks. makecanvaslistener), som returnerer et objekt af typen Product.!!!!!!!!! ConcreteCreator (f.eks. DrawingPad1), der implementerer factory-metoden, så den returnerer et objekt af typen ConcreteProduct.! public class DrawingCanvasListener extends ScribbleCanvasListener {! public DrawingCanvasListener(DrawingCanvas canvas) {! super(canvas);! Klassen DrawingCanvasListener! tillader brug af flere værktøjer! public Tool gettool() { return tool; public void settool(tool tool) { this.tool = tool; 101! 102! public class DrawingCanvas extends ScribbleCanvas {! public void settool(tool tool) {! drawingcanvaslistener.settool(tool);! Klassen DrawingCanvas! tillader brug af flere værktøjer! public Tool gettool() {! return drawingcanvaslistener.gettool();! protected EventListener makecanvaslistener() {! return (drawingcanvaslistener = new DrawingCanvasListener(this));! protected DrawingCanvasListener drawingcanvaslistener;! 103! public class DrawingPad1 extends Scribble {! public DrawingPad1(String title) {! super(title);! inittools();! ActionListener toollistener = new ActionListener() {! public void actionperformed(actionevent event) {! Object source = event.getsource();! if (source instanceof AbstractButton) {!! AbstractButton button = (AbstractButton) source;!! Tool tool = toolkit.setselectedtool(button.gettext());!! drawingcanvas.settool(tool);!!! };! JComponent toolbar = createtoolbar(toollistener);! getcontentpane().add(toolbar, BorderLayout.WEST);! JMenu menu = createtoolmenu(toollistener);! menubar.add(menu, 1); // insert at index position 1! fortsættes! 104!
27 protected ToolKit toolkit;! protected DrawingCanvas drawingcanvas;! public Tool getselectedtool() {! return toolkit.getselectedtool();! protected void inittools() {! toolkit = new ToolKit();! toolkit.addtool(new ScribbleTool(canvas,! "Scribble"));! toolkit.addtool(new TwoEndsTool(canvas,! "Line", TwoEndsTool.LINE));! toolkit.addtool(new TwoEndsTool(canvas,! "Oval", TwoEndsTool.OVAL));! toolkit.addtool(new TwoEndsTool(canvas,! "Rectangle", TwoEndsTool.RECT));! drawingcanvas.settool(toolkit.gettool(0));! protected ScribbleCanvas makecanvas() {! return (drawingcanvas = new DrawingCanvas());! fortsættes! 105! protected JComponent createtoolbar(actionlistener toollistener) {! JPanel toolbar = new JPanel(new GridLayout(0, 1));! int n = toolkit.gettoolcount();! for (int i = 0; i < n; i++) {! Tool tool = toolkit.gettool(i);! JButton button = new JButton(tool.getName());! button.addactionlistener(toollistener);! toolbar.add(button);! return toolbar;! protected JMenu createtoolmenu(actionlistener toollistener) {! JMenu menu = new JMenu("Tools");! int n = toolkit.gettoolcount();! for (int i = 0; i < n; i++) {! Tool tool = toolkit.gettool(i);! JMenuItem menuitem = new JMenuItem(tool.getName());! menuitem.addactionlistener(toollistener);! menu.add(menuitem);! return menu;! 106! Iteration 5! Programstruktur! (iteration 5, værktøjer)! DrawingPad1! DrawingPad2! 1! Toolkit! tools! *! Tool! selectedtool! 0..1! AbstractTool! TwoEndsShape! 1! TwoEndsShapeTool! Ny klasse. Erstatter TwoEndsTool! ScribbleTool! 107! 108!
28 Programstruktur! (iteration 5, former)! Shape! Stroke! TwoEndsShape! 1! TwoEndsShapeTool! LineShape! RectangleShape! OvalShape! public class FilledOvalShape extends OvalShape {! public void draw(graphics g) {! int x = Math.min(x1, x2);! int y = Math.min(y1, y2);! int w = Math.abs(x1 - x2) + 1;! int h = Math.abs(y1 - y2) + 1;! g.setcolor(color);! g.filloval(x, y, w, h);! FilledRectangleShape! FilledOvalShape! 109! 110! public class TwoEndsShapeTool extends AbstractTool {! public TwoEndsShapeTool(ScribbleCanvas canvas, String name,! TwoEndsShape prototype) {! super(canvas, name);! this.prototype = prototype;! public class FilledRectangleShape extends RectangleShape {! public void draw(graphics g) {! int x = Math.min(x1, x2);! int y = Math.min(y1, y2);! int w = Math.abs(x1 - x2) + 1;! int h = Math.abs(y1 - y2) + 1;! g.setcolor(color);! g.fillrect(x, y, w, h);! protected int xstart, ystart;! protected TwoEndsShape prototype;! public void startshape(point p) {! xstart = canvas.x = p.x;! ystart = canvas.y = p.y;! Graphics g = canvas.getgraphics();! g.setxormode(color.white);! g.setcolor(color.lightgray);! prototype.drawoutline(g, xstart, ystart, xstart, ystart);! fortsættes! 111! 112!
29 Iteration 6! public void addpointtoshape(point p) {! Graphics g = canvas.getgraphics();! g.setxormode(color.white);! g.setcolor(color.lightgray);! prototype.drawoutline(g, xstart, ystart, canvas.x, canvas.y);! prototype.drawoutline(g, xstart, ystart, p.x, p.y);! public void endshape(point p) {! try {! TwoEndsShape newshape = (TwoEndsShape) prototype.clone();! newshape.setcolor(canvas.getcurcolor());! newshape.setends(xstart, ystart, p.x, p.y);! canvas.addshape(newshape);! } catch (CloneNotSupportedException e) { Graphics g = canvas.getgraphics();! g.setpaintmode();! canvas.repaint();! 113! 114! Programstruktur! (iteration 6)! Input fra tastatur! DrawingPad2! 1. Kun én komponent ad gangen kan modtage input fra tastaturet.! DrawingPad3! Shape! 1! tools! *! Toolkit! Tool! 0..1! selectedtool! 3. For at modtage input fra tastaturet, må en komponent have tastaturfokus.! Stroke! TwoEndsShape! Text! AbstractTool! 4. En komponent kan opnå tastaturfokus ved hjælp af metoden requestfocus().! 1! TextTool! TwoEndsShapeTool! ScribbleTool! I DrawingPad3 kaldes canvas.requestfocus(), når brugeren efter valg af TextTool klikker med musen på tegneområdet (canvas)! 115! 116!
30 Valg af Tool! Et værktøj kan vælges såvel ved tryk på en knap på værktøjslinjen som ved valg af et menuemne (som også er en knap).! I begge tilfælde er aktionen den samme.! Grænsefladen Action er en udvidelse af ActionListener, som med fordel kan benyttes i tilfælde, hvor funktionaliteten er den samme for flere kontroller.! Konkrete klasser er ofte underklasser af den abstrakte klasse AbstractAction, som implementerer alle metoder i Action, med undtagelse af actionperformed.! Java 2D! Tilbyder avancerede faciliteter til grafiske manipulationer.!!klassen Graphics2D er en underklasse af klassen Graphics, som!tilføjer yderligere grafiske primitiver og attributter.!!!public void paint(graphics g) {!! Grapichs2D g2d = (Graphics2D) g;!! // use g2d!!...!!!!grænsefladerne Shape, Stroke, Paint og Composite.!!Klassen java.awt.geom.affinetransform gør det muligt!at parallelforskyde, skalere, rotere og klippe figurer.!! 117! 118! Ugeseddel 7" 12. oktober oktober! Ekstraopgave 5!!Læs kapitel 11 i lærebogen (side )!!Løs opgave 9.1 (a), dog kun for diamanter.!!de nødvendige koordinatberegninger er angivet på!!figuren nedenfor.! (x 1, y 1 )! ((x 1 +x 2 +y 1 -y 2 )/2, (y 1 +y 2 -x 1 +x 2 )/2)! (x 2, y 2 )! ((x 1 +x 2 -y 1 +y 2 )/2, (y 1 +y 2 +x 1 -x 2 )/2)! Skriv en grafisk applet, der kan blande et spil kort.!! En mulig brugergrænseflade er vist på næste side.! Til brug for programmeringen kan klasserne Card og Deck benyttes. Disse kan sammen med de nødvendige billedfiler (gifs) hentes fra adressen! opgaven på de næste sider.! 119! 120!
31 121!
Grafiske brugergrænseflader II
Grafiske brugergrænseflader II 1 Plan MVC (Model View Controller) - designmønsteret Observer Iterativ udvikling af et tegneprogram - muselyttere - applet/applikation-idiomet - designmønsteret State - designmønsteret
Læs mereimport java.awt.event.*; import java.awt.*; Container <- Panel <- Applet Component <- Button <- Checkbox <- ScrollPane <- Label
Programmering 1999 Forelæsning 13, tirsdag 12. oktober 1999 Oversigt Grafiske brugergrænseflader. Komponenter: Knapper, tekstfelter, checkbokse... Vinduer (containere). Hændelser, hændelsesstyret programmering.
Læs mereVideregående programmering i Java
Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Grafiske komponenter
Læs mereForelæsning Uge 13 Mandag
Forelæsning Uge 13 Mandag Konstruktion af grafiske brugergrænseflader (GUI'er) Definition af de elementer, der vises på skærmen (vinduer, knapper, menuer, scrollbarer, tekster, osv.) Hvordan reagerer de
Læs mereKursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing
Kursusgang 11 Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing Design af brugerflader 11.1 Samme sted Forskellige steder Sidste kursusgang Samtidigt
Læs mereForelæsning Uge 13 Torsdag
Forelæsning Uge 13 Torsdag Konstruktion af grafiske brugergrænseflader (GUI'er) Definition af de elementer, der vises på skærmen (vinduer, knapper, menuer, scrollbarer, tekster, osv.) Hvordan reagerer
Læs mereHvordan organiseres et programs grafik-elementer? OOP e uge kursusgang. Advarsel! Component-objekter
OOP e2002 - uge 42 6. kursusgang Hvordan organiseres et programs grafik-elementer? 1. Teori: class Component og subklasser: Composite pattern layout-managere hændelsesstyret programmering 2. XP-program:
Læs mereOOP e uge kursusgang: Grafik (II) class Scribble (Tegnebrættet) Frihåndstegning: repræsentation
OOP e2002 - uge 43 class Scribble (Tegnebrættet) Det simplest mulige tegnebræt kun en funktion: tegn streger med musen ingen kontrolknapper/valgmuligheder skal dog kunne "holde til" at ændre størrelse
Læs mereSerialization i Java
Serialization i Java Tutorial lavet af Jákup W. Hansen TSU 2006 1.semester 06.novemter 2006 Hvad er Serialization? I vores tekstbog Objects First with Java bliver denne del af Java ikke gennemgået. Men
Læs mereCivilingeniøreksamen 49104 12. januar 2001. Skriftelig prøve den 12. januar 2001 Kursusnummer 49104
Skriftelig prøve den 12. januar 2001 Kursusnummer 49104 Kursusnavn: Programmering. Tilladte hjælpemidler: Alle skriftlige hjælpemidler Opgavesættet består af fire opgaver, der har følgende vægtning: Opgave
Læs mereGrundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering
Skriftlig eksamen i Grundlæggende Programmering ITU, 20. januar 2000 Alle hjælpemidler tilladt, dog ikke datamat. Eksamen er skriftlig, fire timer, og bedømmes efter 13-skalaen. Opgavesættet består af
Læs mereDM34-1. Obligatorisk opgave Dilemma spillet. Jacob Aae Mikkelsen 191076 kok04
DM34-1. Obligatorisk opgave Dilemma spillet Jacob Aae Mikkelsen 191076 kok04 April 2005 Kapitel 1 Resumé Denne rapport dokumenterer udviklingsforløbet og afprøvningen af et spil Dilemma. Spillet går ud
Læs mereVideregående programmering i Java
Videregående programmering i Java Dag 7 Swing og MVC Swing: MVC, Datamodeller, JTable, evt. JTree Evt.: Swing: Præsentations og kontroldel Læsning: VP 6 Dette materiale er under Åben Dokumentlicens, se
Læs mereUgeseddel 4 1. marts - 8. marts
Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,
Læs mereJacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004
Genbrugelige komponenter og designmønstre i Java Jacob Nordfalk Ingeniørhøjskolen i København Nykøbing F itvisioncenter 24. februar 2004 Program Om Jacob Nordfalk introduktion (ikke-teknisk del) Komponentbaseret
Læs mereKonstruktion af grafiske brugergrænseflader (GUI'er)
Forelæsning Uge 13 Konstruktion af grafiske brugergrænseflader (GUI'er) Definition af de elementer, der vises på skærmen (vinduer, knapper, menuer, scrollbarer, tekster, osv.) Hvordan reagerer de på input
Læs mereKursusgang 12. Oversigt: Sidste kursusgang Layout-manager Event-håndtering. Design af brugerflader 12.1
Kursusgang 12 Oversigt: Sidste kursusgang Layout-manager Event-håndtering Design af brugerflader 12.1 Sidste kursusgang Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design
Læs mereDANMARKS TEKNISKE UNIVERSITET
DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler
Læs mereb) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.
Exercise 1: Opgave 9.1 på CodeJudge. a) Lav klasserne Cirkel, Rektangel og Kvadrat, som implementerer vedhæftede interface From.java (se CodeJudge). Lav Rektangel før du laver Kvadrat. Kan du bruge nedarvning
Læs mereDM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11
DM01 DM01 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 18/3-2003 Side 1 af 11 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DILEMMA:...4 2.1.1 METODER:...4
Læs mereUniversity of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11
DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void
Læs mereTree klassen fra sidste forelæsning
Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years
Læs mereObjektorienterede metoder
Objektorienterede metoder Denne gang: Designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Singleton eksempel: Forskellige slags
Læs mere5. Teknisk beskrivelse af programmet 5.1 Programmets primære strukturer Datastruktur 1-6 3-6 Datastruktur
5. Teknisk beskrivelse af programmet Afsnittet indeholder en beskrivelse af de vigtigste klasser i programmet. (Den tekniske beskrivelse af databasen er givet i afsnit 3.3 Databasedesign på side 20.) Dette
Læs mereDag 10 Flertrådet programmering
Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument,
Læs mereDatalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning
Datalogi OB, Efterår 2002 OH er, forelæsning 10/9-2002 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Eftermiddagens opgave:
Læs mereAAU, Programmering i Java Intern skriftlig prøve 18. maj 2007
AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal
Læs mereOver Forelæsning omponenter ogrammering sigt 14, 1999 freda containere 15. oktober 1999 Eksempel: out GUI til beregning fakultet.
Programmering 1999 Forelæsning 14, fredag 15. oktober 1999 Oversigt Repetition: GUI komponenter og containere. Layout af grafiske brugergrænseflader i Java. Større layout-opgave. Programmering 1999 KVL
Læs mereIntroduktion til ActionScript, fortsat
Introduktion til ActionScript, fortsat Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling
Læs mereA Profile for Safety Critical Java
A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren
Læs mereDatabaseadgang fra Java
Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,
Læs mereVideregående programmering i Java
Videregående programmering i Java Dag 3 Skabende designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Eksempel: Forskellige slags
Læs mereVideregående Programmering Obligatorisk opgave - 3. semester, efterår 2004
Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),
Læs mereProgrammering. Udvidet Programmering. Kurserne. Kurset: programmering i sproget Java. Lærerne: Morten Larsen og Peter Sestoft
Kurserne Kurset: programmering i sproget Java Programmering og Udvidet Programmering Lærerne: Morten Larsen og Peter Sestoft Kursusmål: I skal lære at skrive interessante programmer i Java Forudsætninger:
Læs mereBilag 1 Rige billeder Ordremodtagelse
Bilag1 Rigebilleder Ordremodtagelse Tværfagligtprojektpå2.Semester Bilag afchristian,kennetogmartin 71 Overordnet Tværfagligtprojektpå2.Semester Bilag afchristian,kennetogmartin 72 Produktionsgulvet Tværfagligtprojektpå2.Semester
Læs mereLøsning af møntproblemet
Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet
Læs mereSoftware Construction 1 semester (SWC) Spørgsmål 1
Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /
Læs mereEksempel på en database: studenter, kurser, eksamener
Udvidet Programmering 1999 Forelæsning 20, fredag 12. november 1999 Relationsdatabaser: relationer, tupler, attributter Forespørgselssproget SQL Databasesystemet PostgreSQL Tilgang til relationsdatabaser
Læs mereVideregående programmering i Java
Videregående programmering i Java VPJ dag 1 Introduktion og overblik over kurset Datastrukturer: Lister, mængder og iteratorer Opsamling: Grafikprogrammering, komponenter, containere og layout Bruge komponenter
Læs mereForelæsning Uge 3 Torsdag
Forelæsning Uge 3 Torsdag Billedredigering (bl.a. brug af for-løkker) Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt)
Læs mereVideregående programmering i Java
Videregående programmering i Java Dag 5 Model View Controller arkitekturen Model View Controller arkitekturen (MVC) Evt.: Rekursion Læsning: VP 19 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html
Læs mereEksempel: Skat i år 2000
Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)
Læs mereKlasser og nedarvning
Datalogi C, Efterår 2004 OH er, forelæsning 21/9-2004 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Opgaven til senere: Generalisere
Læs mereRMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).
Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer
Læs mereIntroduktion til design patterns.
Introduktion til design patterns. Genbrug. Pattern languges i arkitektur. Standardbeskrivelse af design patterns. Oversigt over design patterns. Observer. Composite. Decorator. Abstract Factory. Patterns
Læs mereIntroduktion til ActionScript
Introduktion til ActionScript Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling på
Læs mereKursus i OOP og Java. Kursus i Objektorienteret programmering i Java
Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger
Læs mereDag 10 Flertrådet programmering
Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument,
Læs mereC# spil (del 1) - Kom i gang med et simpelt spil
Denne guide er oprindeligt udgivet på Eksperten.dk C# spil (del 1) - Kom i gang med et simpelt spil Denne artikel starter helt fra grunden (med GDI). Den viser hvordan man undgår flimmer, og hvordan man
Læs mereEksamens spørgsmål i Java HTML - DataBase 3. Semester (i)
Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i) 1: KLASSE METODE KONSTRUKTØR EKS. PÅ TYPE (VARIABLE) PUBLIC/PRIVATE OBJECT UD FRA KLASSE KALD METODE TILFØR PARAMETER TIL METODE RETURNERE VARIBEL.
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mere9.8 Kildekode. side 88. Pakke Klasse Sidenummer. fortsætter..
9.8 Kildekode Pakke Klasse Sidenummer db Aktivitetstype 91 Behandler 91 ConnectDB 92 DagensKommentar 93 Helligdag 94 IkkePrimaerTid 94 Patient 96 Patientaftale 96 PatientAktivitet 97 Patientgruppe 98 PatientgruppeItem
Læs mereJavaFX. Denne artikel beskriver Java's nye GUI framework JavaFX. Den forudsætter et vist kendskab til Java og GUI udvikling.
Denne guide er oprindeligt udgivet på Eksperten.dk JavaFX Denne artikel beskriver Java's nye GUI framework JavaFX. Den forudsætter et vist kendskab til Java og GUI udvikling. Skrevet den 28. jul 2013 af
Læs mereOOP e uge kursusgang: Samtidighed (II) Safety = sikkerhed. Safety
= sikkerhed I denne sammenhæng: = "trådsikkerhed" " conditions.. stipulate that nothing bad will ever happen" (XP s. 377) Trådsikkerhed betyder sikkerhed mod inkonsistens pga. flertrådning ikke f.eks.
Læs mereJava Klasse nedarvninger
Denne guide er oprindeligt udgivet på Eksperten.dk Java Klasse nedarvninger Et let lille overblik i hvordan klasse nedarvning virker i java Skrevet den 07. dec 2011 af mochners I kategorien Programmering
Læs mereVideregående programmering i Java
Videregående programmering i Java Dag 2 Objektorienterede principper Fastlæggelse af emne for projekt Ansvarsområder, kobling og indkapsling Programmere i pakker Specificere funktionalitet i et interface
Læs mereObjektorienteret Programmering
Objektorienteret Programmering Struktureret Systemudvikling Jan Bendtsen Automation and Control Indhold Lidt om programmeringssprog Klasser i Java Klasser i C++ Oversættelse og kørsel af kode Et eksempel:
Læs mereIntroduktion til ActionScript
Introduktion til ActionScript Kaspar Rosengreen Nielsen kaspar@interactivespaces.net HUSK: Studentermøde for datalogistuderende Torsdag d. 11/2 kl. 15 - i lokale Ada 333 Har du en mening om dit studie?
Læs mereclass subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.
Programmering 1999 Forelæsning 11, tirsdag 5. oktober 1999 Oversigt Klasse-hierarkier: superklasser og subklasser Nedarvning Polymorfi Programmering 1999 KVL Side 11-1 Hierarkier En klasse repræsenterer
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereKursus i OOP og Java
Kursus i OOP og Java Sidst opdateret 24. november 2001 kun afpudset t.o.m lektion 12 Indholdsfortegnelse Kursus i OOP og Java 1 Til underviseren 5 Om transparenterne 5 Om ugesedlerne 5 Lektion 1 6 Mål
Læs mereI profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller
Upload fil Upload fil skal ses som et alternativ til at indsende tællefiler vedhæftet til mails Upload fil kan være en hurtigere og mere håndholdt måde at få data ind i Mastra på. Man starter med via Gennemse
Læs mereSingleton pattern i Java
Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.
Læs mereSWC eksamens-spørgsmål. Oversigt
SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition
Læs mereKlasser og objekter. (Afsnit i manualen)
Klasser og objekter (Afsnit 4 + 5 i manualen) Grundbegreber Klasser og objekter beskrivelse oprettelse Attributter og metoder tilstand opførsel Indkapsling afskærmning datarepræsentationsuafhængighed Klasser
Læs mereForelæsning Uge 3 Torsdag
Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt) antal elementer Afleveringsopgave:
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereUniversity of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2
DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld
Læs mereObjects First with Java A Practical Introduction Using BlueJ
Objects First with Java A Practical Introduction Using BlueJ En introduktion til objektorienteret programmering for begyndere ud fra et software engineering aspekt Om at programmere i Java, ikke om værktøjet
Læs merePolymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion
Polymorfi Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type Coercion Tvangskonvertering (forfremmelse og begrænsning) Oversigt Abstrakt klasse abstrakt
Læs mereAftenskole i programmering sæson Registrering af tid. Sæson 2 - Lektion 5
Registrering af tid Sæson 2 - Lektion 5 Før jul Vi har designet og bygget en model til håndtering af en timeregistrering Vi har kigget på hvordan vi håndterer fejl Vi har kopieret koden over i Bents x-code
Læs mereUniversity of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4
DM502 Forelæsning 4 Flere kontrolstrukturer for-løkke switch-case Metoder Indhold Arrays og sortering af arrays String-funktioner for-løkke Ofte har man brug for at udføre det samme kode, for en sekvens
Læs mereForelæsning Uge 2 Torsdag
Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereRMI avanceret. Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer.
Denne guide er oprindeligt udgivet på Eksperten.dk RMI avanceret Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer. Den forudsætter
Læs mereVideregående programmering i Java
Videregående programmering i Java Dag 9 Andre designmønstre Andre designmønstre: Uforanderlig, Fluevægt, Lagdelt Initialisering, Komposit/Rekursiv Komposition, Kommando/Ændring Fremlæggelse af programmering/status
Læs mereKursusarbejde 3 Grundlæggende Programmering
Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................
Læs mereForelæsning Uge 4 Mandag
Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder
Læs mereClassic Tween. Navigationsseddel. Fase Forklaring Navigation. Åbn en ny Flash File. Åbn Flash, vælg symbolet ud for ActionScript 3.0.
1 Classic Tween Åbn en ny Flash File Åbn Flash, vælg symbolet ud for ActionScript 3.0 Navgiv laget Navngiv laget kugle Tegn en udfyldt cirkel Vælg Oval Tool, vælg rød farve, træk en cirkel på Stage Indsæt
Læs mereFase Forklaring Navigation. Åbn Flash, vælg symbolet ud for Actions Script 3.0. Markér frame 15, højreklik og vælg F6
Classic Tween Åbn en ny Flash Film Åbn Flash, vælg symbolet ud for Actions Script 3.0 Navgiv laget Navngiv laget kugle Tegn en udfyldt cirkel Vælg Oval Tool, vælg rød farve, træk en cirkel inde på Stage
Læs mereHvad er et distribueret objekt? Plan 12.3. Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation
Plan 12.3. Oversigt over grundlæggende begreber Java: eksempel på applikation, programmering og oversættelse Uddybning af grundlæggende begreber Java RMI implementation Forklaring af øvelsen Hvad er et
Læs mereUniversity of Southern Denmark Syddansk Universitet. DM502 Forelæsning 6
DM502 Forelæsning 6 Klasser og objekter Introduktion Math-klassen Indhold Klasser vs. objekter Først et tænkt eksempel: Vi vil lave en bil i Java 1. spørgsmål: Hvad karakteriserer en bil? Model År Farve...
Læs mereForelæsning Uge 3 Mandag
Forelæsning Uge 3 Mandag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet
Læs mereIntroduktion til Flash, fortsat
Introduktion til Flash, fortsat Kaspar Rosengreen Nielsen kaspar@interactivespaces.net Dagens program Opsamling på sidste forelæsning. Vi vil beskæftige os med følgende emner i dagens forelæsning: Komponenter
Læs mereCrash Course i Programmering. HumTek, RUC
Crash Course i Programmering HumTek, RUC Kursus mål At give en basal introduktion til programmering i sproget Processing At give et overblik over sprogets potentiale At have det sjovt :-) Kursus form Meget
Læs mereDM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/
DM502 Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ 1 DM502 Bog, ugesedler og noter De første øvelser Let for nogen, svært for andre Kom til øvelserne! Lav opgaverne!
Læs mereSoftware 1 with Java. Recitation No. 7 (Servlets, Inheritance)
Software 1 with Java Recitation No. 7 (Servlets, Inheritance) Servlets Java modules that run on a Web server to answer client requests For example: Processing data submitted by a browser Providing dynamic
Læs mereForelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999
sammenligninger, hvor Programmering 1999 Forelæsning 17, tirsdag 2 november 1999 Søgning efter en given værdi i en tabel Lineær søgning og binær søgning Effektivitet: maskinuafhængig vurdering af køretid
Læs mereclass Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.
Programmering 1999 Forelæsning 4, fredag 10. september 1999 Klasser og objekter Felter, konstruktorer, this Eksempler på klasser: Time, Appointment Eksempler på metoder i Time og Appointment Klassefelter:
Læs mereMiniprojekt2011. Formålet er at lære og indlære god objektorienteret programudvikling og programmering med Java, samt undervejs at opfylde studiekrav.
Miniprojekt2011 Projektbeskrivelse Der skal fremstilles en lille java application på PC, hvor brugeren kan foretage interaktioner med en simpel database på disken via et grafisk brugerinterface. Formålet
Læs mereRoskilde Universitet Forår 2015. First Person Shooter. Datalogi 4. Semester. Forfatter: Jeppe Emil Nygaard Vejleder: Henning Christiansen
Roskilde Universitet Forår 2015 First Person Shooter Datalogi 4. Semester Forfatter: Jeppe Emil Nygaard Vejleder: Henning Christiansen Abstract This project investigates how programming 3D works in java,
Læs mereVirkefeltsregler i Java
Virkefeltsregler i Java int i; int k; Sequence s; int j; What s in a name? Brian spillede blændende i søndags! Skolen ligger i Viby Ring til Kirsten og sig at... Et navn fortolkes i en kontekst og konteksten
Læs mereAbstrakte datatyper C#-version
Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype
Læs mereUniversity of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3
DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2015 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 3. marts, 2015 Dette projekt udleveres i to dele. Hver del har sin deadline, således
Læs mereSingleton pattern i C#
Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i C# Denne artikel beskriver Singleton pattern og implementation i C#. Den forudsætter kendskab til C# men ikke til Singleton. Der er
Læs merePerspektiverende Datalogi Internetalgoritmer. MapReduce. Gerth Stølting Brodal
Perspektiverende Datalogi Internetalgoritmer MapReduce Gerth Stølting Brodal MapReduce Implementationer Dean, F. and Ghemawat, S. (2004) MapReduce: Simplified Data Processing on Large Clusters. In: Sixth
Læs mere//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!
Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for
Læs mereReal-time programming safety in Java and Ada
Real-time programming safety in Java and Ada Bo Sandén Presenter: Thomas Bøgholm 25. oktober 2007 Forfatteren Artiklen Synkroniserings Begreber Bo Sandén Professor på Colorado Technical University Beskæftiger
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2013 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 5. marts, 2013 Dette projekt udleveres i to dele. Hver del har sin deadline, således
Læs mere