Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • ingmar.forsberg/lab4
  • Leon.Dammann/lab-4-inf-101
  • markus.trohjell/lab4
  • Viktor.Yordanov/lab4
  • Anders.Sortun/lab-4-v-23
  • amilia.storm/lab4
  • Ola.Kristoffersen/lab-4-2
  • Malvika.Singh/lab4
  • ii/inf101/23v/students/lab4
  • Henrik.Dalsto/lab4
  • Olav.Eikanger/lab4
  • shahnaz.mhethawy/lab4
  • ole-andreas.jensen/lab4
  • Qingle.Xu/lab4
  • Axel.Lundeby/lab4
  • Emma.Wergedahl/lab4
  • Kai.Waloen/lab4
  • R.Bortne/lab4
  • Thomas.T.Jensen/lab4
  • Halfdan.Hesthammer/lab-4-inf-101-v-23
  • Natanem.Hailu/lab4
  • Julie.Mikkelsen/lab-4-jm
  • Stine.Fanebust/lab4
  • Martin.Aasenhuus/lab4
  • Oscar.Stromsli/inf-101-lab-4
  • Jan.Brunner/lab-4-2023
  • Mathias.Handeland/lab4
  • Theodor.Nissen-Meyer/lab4
  • V.Larsen/lab4
  • Havard.Kolve/lab4
  • Dag.Himle/lab4
  • Benjamin.Fossbakken/lab4
  • Martin.Fausa/lab4
  • Fernando.Aguilar/lab4
  • Mattias.Nordahl/lab-4-v-23
  • Olav.Skogen/lab4
  • Marius.Jorgensen/lab4
  • David.Mo/lab4
  • Henrik.Tennebekk/lab4
  • Cecilie.Tveter/lab-4-inf-101-v-23
  • Lauritz.Angeltveit/lab4
  • Kristian.Roynestad/lab4
  • Julie.Hallan/lab4
  • Stian.Bekkeheien/lab-4-inf-101
  • Mattias.Nordahl/lab-4-v-23-1
  • Jacob.Grahm-Haga/lab4
  • Elias.Aronsen/lab-4-23-v
  • Henrik.Skjeret/lab-4-v-23
48 results
Show changes
Commits on Source (2)
......@@ -34,9 +34,9 @@ Undersøk filene i pakken `no.uib.inf101.colorgrid`, og besvar spørsmålene i `
I denne oppgaven skal du lage klassen `ColorGrid` ([link](./src/main/java/no/uib/inf101/colorgrid/ColorGrid.java)). Den er nå helt tom.
* [ ] La klassen implementere grensesnittet `IColorGrid`
* [ ] La klassen ha en konstruktør med to parametre: en int som beskriver antall rader, og en int som beskriver antall kolonner. Standard-verdien til en posisjon i rutenettet (før `set`-metoden har blitt kalt på gitt posisjon) skal være `null`.
* [ ] Fyll ut metodene du trenger i overenstemmelse med javadoc-kommentarene til `IColorGrid`.
* [done] La klassen implementere grensesnittet `IColorGrid`
* [done] La klassen ha en konstruktør med to parametre: en int som beskriver antall rader, og en int som beskriver antall kolonner. Standard-verdien til en posisjon i rutenettet (før `set`-metoden har blitt kalt på gitt posisjon) skal være `null`.
* [done] Fyll ut metodene du trenger i overenstemmelse med javadoc-kommentarene til `IColorGrid`.
Du kan leke deg litt i `Main::main` for å sjekke for deg selv at klassen fungerer som du forventer. For eksempel:
......@@ -65,16 +65,16 @@ Husk å rydde opp etter deg i `Main::main` når du er ferdig!
Ha kursnotatene om [grafikk](https://inf101.ii.uib.no/notat/grafikk) i bakhodet når du gjør denne oppgaven.
I `GridView`:
* [ ] La klassen utvide `JPanel`
* [ ] La konstruktøren til `GridView` sette standard størrelse på lerretet til 400x300 piksler
* [ ] Overskriv metoden `public void paintComponent(Graphics g)`. Begynn med å kalle på super-metoden og opprett en Graphics2D -variabel fra g, slik som vist i kursnotatene om grafikk.
* [ ] Velg din favoritt-figur fra kursnotatene og tegn den i paintComponent (midlertidig, fjern den igjen når vi senere skal tegne rutenettet )
* [done] La klassen utvide `JPanel`
* [done] La konstruktøren til `GridView` sette standard størrelse på lerretet til 400x300 piksler
* [done] Overskriv metoden `public void paintComponent(Graphics g)`. Begynn med å kalle på super-metoden og opprett en Graphics2D -variabel fra g, slik som vist i kursnotatene om grafikk.
* [done] Velg din favoritt-figur fra kursnotatene og tegn den i paintComponent (midlertidig, fjern den igjen når vi senere skal tegne rutenettet )
I `Main`:
* [ ] Opprett et `GridView` -objekt
* [ ] Opprett et `JFrame` -objekt
* [ ] Kall `setContentPane` -metoden på JFrame-objektet med GridView-objektet som argument
* [ ] Kall `setTitle`, `setDefaultCloseOperation`, `pack` og `setVisible` på JFrame-objektet etter mønster fra kursnotatene om grafikk.
* [done] Opprett et `GridView` -objekt
* [done] Opprett et `JFrame` -objekt
* [done] Kall `setContentPane` -metoden på JFrame-objektet med GridView-objektet som argument
* [done] Kall `setTitle`, `setDefaultCloseOperation`, `pack` og `setVisible` på JFrame-objektet etter mønster fra kursnotatene om grafikk.
✅ Du er klar til å gå videre hvis du ser tegningen din i et vindu når du kjører `Main`.
......@@ -82,7 +82,7 @@ I `Main`:
I `Main::main` skal vi nå opprette et rutenett, og gi det til `GridView`-konstruktøren som et argument ved opprettelse. Deretter skal vi endre GridView slik at den tegner dette rutenettet.
* [ ] I `Main::main`, opprett et ColorGrid-objekt med 3 rader og 4 kolonner. Sett fargene i hjørnene til å være
* [done] I `Main::main`, opprett et ColorGrid-objekt med 3 rader og 4 kolonner. Sett fargene i hjørnene til å være
* Rød i hjørnet oppe til venstre (posisjon (0, 0))
* Blå i hjørnet oppe til høyre (posisjon (0, 3))
* Gul i hjørnet nede til venstre (posisjon (2, 0))
......@@ -115,11 +115,11 @@ Disse siste delene med informasjon vil ikke endre seg særlig fra kall til kall,
I klassen `CellPositionToPixelConverter`:
* [ ] Opprett instansvariabler:
* [done] Opprett instansvariabler:
* En `Rectangle2D` -variabel `box` som beskriver innenfor hvilket område rutenettet skal tegnes
* En `GridDimension` -variabel `gd` som beskriver størrelsen til rutenettet rutene vil være en del av
* En `double` kalt `margin` som beskriver hvor stor avstanden skal være mellom rutene
* [ ] Opprett en konstruktør i klassen med tre parametre: en `Rectangle2D` -variabel, en `GridDimension` -variabel og en `double`. Initaliser feltvariablene med argumentene som mottas i konstruktøren.
* [done] Opprett en konstruktør i klassen med tre parametre: en `Rectangle2D` -variabel, en `GridDimension` -variabel og en `double`. Initaliser feltvariablene med argumentene som mottas i konstruktøren.
* [ ] Opprett metoden `getBoundsForCell` med en parameter av typen `CellPosition` (i figur under navgitt `cp`) og returtype `Rectangle2D`.
Returverdien er et `Rectangle2D` -objekt. For å opprette dette objektet, må du regne ut fire verdier: x, y, bredde og høyde for den gitte ruten. Så kan du returnere et nytt `Rectangle2D.Double` -objekt med disse verdiene.
......@@ -153,9 +153,9 @@ Hint:
Denne metoden i `GridView` skal ha et `Graphics2D` -objekt som parameter, og ikke ha noen returverdi. Planen er å først tegne en stor grå firkant, og så tegne selve rutene «oppå».
- [ ] Opprett et Rectangle2D -objekt med en fast 30 pikslers avstand til kanten på vinduet (se avsnitt om fast avstand til kantene på lerretet i kursnotater om [grafikk](https://inf101.ii.uib.no/notat/grafikk/#fast-avstand-til-kantene-på-lerretet))
- [done] Opprett et Rectangle2D -objekt med en fast 30 pikslers avstand til kanten på vinduet (se avsnitt om fast avstand til kantene på lerretet i kursnotater om [grafikk](https://inf101.ii.uib.no/notat/grafikk/#fast-avstand-til-kantene-på-lerretet))
* Det kan være lurt å lagre tallet som en konstant med et beskrivende navn (altså opprett en static final feltvariabel `private static final double OUTERMARGIN = 30;` og så bruke `OUTERMARGIN` i stedet for 30 når du kommer tilbake her)
- [ ] Fyll rektangelet med gråfarge på lerretet.
- [done] Fyll rektangelet med gråfarge på lerretet.
* Det kan være lurt å lagre fargen som en konstant med et beskrivende navn (altså opprett en static final feltvariabel `private static final Color MARGINCOLOR = Color.LIGHT_GRAY;` og så bruke `MARGINCOLOR` i stedet for Color.LIGHT_GRAY når du kommer tilbake her)
- [ ] Opprett et `CellPositionToPixelConverter` -objekt.
* Hvilket objekt med typen GridDimension skal du bruke som argument ved opprettelsen? Har du et slik objekt liggende et sted allerede?
......
package no.uib.inf101.colorgrid;
public class ColorGrid {
// TODO: Implement this class
import java.awt.Color;
import java.util.ArrayList;
import java.util.List;
public class ColorGrid implements IColorGrid{
int rows;
int cols;
Color standardValue = null;
CellColor[][] grid;
public ColorGrid(int rows, int cols){
this.rows = rows;
this.cols = cols;
grid = new CellColor[rows][cols];
for(int i = 0; i < rows; i++){
for(int j = 0; j < cols; j++){
grid[i][j] = new CellColor(new CellPosition(i, j), standardValue);
}
}
}
@Override
public int rows() {
return this.rows;
}
@Override
public int cols() {
return this.cols;
}
@Override
public List<CellColor> getCells() {
// TODO Auto-generated method stub
List<CellColor> outputList = new ArrayList<>(rows * cols);
for(int i = 0; i < rows(); i++){
for(int j = 0; j < cols(); j++){
outputList.add(grid[i][j]);
}
}
return outputList;
}
@Override
public Color get(CellPosition pos) {
checkIfOutOfBounds(pos);
return grid[pos.row()][pos.col()].color();
}
@Override
public void set(CellPosition pos, Color color) {
checkIfOutOfBounds(pos);
grid[pos.row()][pos.col()] = new CellColor(pos, color);
}
public void checkIfOutOfBounds(CellPosition pos){
if((pos.row()>this.rows) || (pos.col()>this.cols)){
throw new IndexOutOfBoundsException();
}
}
}
......@@ -9,7 +9,7 @@ public final class TextQuestions {
* How many methods does a class implementing IColorGrid need to
* implement at minimum?
*/
static final Integer a1 = null;
static final Integer a1 = 5;
/**
* Consider the interface IColorGrid, and notice how it extends the
......@@ -18,7 +18,7 @@ public final class TextQuestions {
* true or false: If an object has the type IColorGrid, it must
* also have the type CellColorCollection.
*/
static final Boolean a2 = null;
static final Boolean a2 = true;
/**
* Consider the interface IColorGrid, and notice how it extends the
......@@ -27,7 +27,7 @@ public final class TextQuestions {
* true or false: If an object has the type CellColorCollection, it
* must also have the type IColorGrid.
*/
static final Boolean a3 = null;
static final Boolean a3 = false;
/**
* Consider the interface IColorGrid, and notice how it extends the
......@@ -36,7 +36,7 @@ public final class TextQuestions {
* true or false: If an object has the type GridDimension, it
* must also have the type CellColorCollection.
*/
static final Boolean a4 = null;
static final Boolean a4 = false;
/**
* Consider the interface IColorGrid, and notice how it extends the
......@@ -45,7 +45,7 @@ public final class TextQuestions {
* true or false: for an object to have the type IColorGrid, it must
* belong to a class that implements the interface IColorGrid.
*/
static final Boolean a5 = null;
static final Boolean a5 = true;
/**
* Consider the interface IColorGrid, and notice how it extends the
......@@ -54,5 +54,5 @@ public final class TextQuestions {
* true or false: for a class to inherit the type GridDimension, it is
* sufficient to implements IColorGrid.
*/
static final Boolean a6 = null;
static final Boolean a6 = true;
}
package no.uib.inf101.gridview;
import java.awt.geom.Rectangle2D;
import no.uib.inf101.colorgrid.CellPosition;
import no.uib.inf101.colorgrid.GridDimension;
public class CellPositionToPixelConverter {
// TODO: Implement this class
Rectangle2D box;
GridDimension gd;
Double margin;
public CellPositionToPixelConverter(Rectangle2D box, GridDimension gd, double margin){
this.box = box;
this.gd = gd;
this.margin = margin;
}
public Rectangle2D getBoundsForCell(CellPosition pos){
Rectangle2D cell = new Rectangle2D.Double(cellX(pos),cellY(pos),cellWidth(),cellHeight());
return cell;
}
public double cellHeight(){
double pixelsMargin = (gd.rows()+1) * this.margin;
double pixelsLeftForCells = box.getHeight() - pixelsMargin;
return pixelsLeftForCells/gd.rows();
}
public double cellWidth(){
double pixelsMargin = (gd.cols()+1) * this.margin;
double pixelsLeftForCells = box.getWidth() - pixelsMargin;
return pixelsLeftForCells/gd.cols();
}
public double cellX(CellPosition pos){
double col = pos.col();
double xValue = (margin + cellWidth())*(col) + margin + box.getX();
return xValue;
}
public double cellY(CellPosition pos){
double row = pos.row();
double yValue = (margin + cellHeight())*(row) + margin + box.getY();
return yValue;
}
}
package no.uib.inf101.gridview;
public class GridView {
import java.awt.Dimension;
import javax.swing.JPanel;
import no.uib.inf101.colorgrid.CellColor;
import no.uib.inf101.colorgrid.CellColorCollection;
import no.uib.inf101.colorgrid.CellPosition;
import no.uib.inf101.colorgrid.IColorGrid;
import java.awt.Graphics2D;
import java.awt.Graphics;
import java.awt.geom.Arc2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.Arc2D.Double;
import java.util.Iterator;
import java.util.List;
import java.awt.Color;
public class GridView extends JPanel{
IColorGrid grid;
// TODO: Implement this class
public GridView(IColorGrid grid){
this.setPreferredSize(new Dimension(400, 300));
this.grid = grid;
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
/*
Double shape = new Arc2D.Double(
new Rectangle2D.Double(10, 30, 180, 60),
15, 270, Arc2D.PIE
);
g2.setColor(Color.PINK);
g2.fill(shape);
*/
drawGrid(g2);
}
private static final double OUTERMARGIN = 30;
private static final Color MARGINCOLOR = Color.LIGHT_GRAY;
private static final double INNERMARGIN = 30;
public void drawGrid(Graphics2D g2){
//Draw background
double x = OUTERMARGIN;
double y = OUTERMARGIN;
double width = this.getWidth() - 2*OUTERMARGIN;
double height = this.getHeight() - 2*OUTERMARGIN;
g2.setColor(MARGINCOLOR);
Rectangle2D backGround =new Rectangle2D.Double(x,y,width,height);
g2.fill(backGround);
CellPositionToPixelConverter converter = new CellPositionToPixelConverter(backGround, grid, INNERMARGIN);
drawCells(g2, grid, converter);
}
private static void drawCells(Graphics2D g2, CellColorCollection listOfCells, CellPositionToPixelConverter converter){
Iterator<CellColor> it = listOfCells.getCells().iterator();
while(it.hasNext()){
CellColor cell = it.next();
//Set color for cell
if (cell.color() == null){
g2.setColor(Color.LIGHT_GRAY);
g2.setColor(Color.BLACK);
} else {
g2.setColor(cell.color());
}
g2.fill(converter.getBoundsForCell(cell.cellPosition()));
}
}
}
package no.uib.inf101.gridview;
import no.uib.inf101.colorgrid.CellPosition;
import no.uib.inf101.colorgrid.ColorGrid;
import no.uib.inf101.colorgrid.IColorGrid;
import java.awt.Color;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) {
// TODO: Implement this method
IColorGrid grid = new ColorGrid(3, 4);
grid.set(new CellPosition(0, 0), Color.RED);
grid.set(new CellPosition(0, 3), Color.BLUE);
grid.set(new CellPosition(2, 0), Color.YELLOW);
grid.set(new CellPosition(2, 3), Color.GREEN);
GridView myView = new GridView(grid);
JFrame frame = new JFrame();
frame.setContentPane(myView);
frame.setTitle("HOORAH");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}