LAPORAN AKHIR
PRAKTIKUM PEMROGRAMAN OBJEK 2
MODUL 6
GRAPHICS 2D
Disusun oleh:
Ezra Mae Crisnaweni 3411201084
Kelas C
PROGRAM STUDI INFORMATIKA
FAKULTAS SAINS DAN INFORMATIKA
UNIVERSITAS JENDERAL ACHMAD YANI
2022
BAB I
HASIL DAN TUGAS PRAKTIKUM
1.1 Program 6-1. ColorJPanel.java
- Source Code
package modul6;
import java.awt.Graphics;
import java.awt.Color;
import javax.swing.JPanel;
/**
*
* @author acer
*/
public class ColorJPanel extends JPanel {
public void paintComponent(Graphics g){
super.paintComponent( g );
this.setBackground( Color.WHITE);
//set new draw
g.setColor(new Color(255, 0, 0) );
g.fillRect(15,25,100,20);
g.drawString("CurrentRGB:"+g.getColor(),130,40);
//set new float
g.setColor(new Color(0.50f,0.75f,0.0f) );
g.fillRect(15,50,100,20);
g.drawString("CurrentRGB:"+g.getColor(),130,65);
//mnew color Object
g.setColor(Color.BLUE );
g.fillRect(15,75,100,20);
g.drawString("CurrentRGB:"+g.getColor(),130,90);
//display
Color color = Color.MAGENTA;
g.setColor(color);
g.fillRect(15,100,100,20);
g.drawString("RGBValues:"+color.getRed()
+","+color.getGreen()+","+color.getBlue(),130,115);
}
}
- Tampilan Program
Gambar 1 Tampilan ColorJPanel.java
- Analisa
Gambar di atas merupakan tampilan dari hasil compile program
ColorJPanel. Program ini tidak bisa dieksekusi dikarenakan program ini
tidak memiliki main method.
1.2 Program 6-2. ShowColors.java
- Source Code
package modul6;
import javax.swing.JFrame;
/**
*
* @author acer
*/
public class ShowColors {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
JFrame frame = new JFrame("Using Colors");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLO
SE);
ColorJPanel colorJPanel = new ColorJPanel();
frame.add(colorJPanel);
frame.setSize(400,180);
frame.setVisible(true);
}
- Tampilan Program
Gambar 2 Tampilan ShowColors.java
- Analisa
Gambar di atas merupakan tampilan dari hasil compile program
ShowColors. Program ini merupakan main method dari program 6-1,
dimana class ColorJPanel akan dipanggil dan dieksekusi.
1.3 Program 6-3. ShowColors2JFrame.java
- Source Code
package modul6;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JColorChooser;
import javax.swing.JPanel;
/**
*
* @author acer
*/
public class ShowColors2JFrame extends JFrame{
private JButton changeColorJButton;
private Color color = Color.LIGHT_GRAY;
private JPanel colorJPanel;
public ShowColors2JFrame(){
super( "Using JColorChooser" );
colorJPanel = new JPanel();
colorJPanel.setBackground( color );
changeColorJButton = new JButton( "Change
Color" );
changeColorJButton.addActionListener(new
ActionListener() {
public void actionPerformed(
ActionEvent event ){
color =
JColorChooser.showDialog( ShowColors2JFrame.this, "Choose
a color", color );
if ( color == null )color =
Color.LIGHT_GRAY;colorJPanel.setBackground( color );
}
}
);
add( colorJPanel, BorderLayout.CENTER );
add( changeColorJButton, BorderLayout.SOUTH );
setSize( 400, 130 );
setVisible( true );
}
}
- Tampilan Program
Gambar 3 Tampilan ShowColors2JFrame.java
- Analisa
Gambar di atas merupakan tampilan dari hasil compile program
ShowColors2JFrame. Program ini tidak bisa dieksekusi dikarenakan
program ini tidak memiliki main method.
1.4 Program 6-4. ShowColors2.java
- Source Code
package modul6;
import javax.swing.JFrame;
/**
*
* @author acer
*/
public class ShowColors2 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
ShowColors2JFrame application= new
ShowColors2JFrame();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE
);
}
- Tampilan Program
Gambar 4 Tampilan ShowColors2.java
Gambar 5 Tampilan ShowColors2.java
- Analisa
Gambar di atas merupakan tampilan dari hasil compile program
ShowColors2. Program ini merupakan main method dari program 6-3,
dimana class ShowColors2JFrame akan dipanggil dan dieksekusi. Ketika
button ditekan, maka akan muncul tampilan palette color. Frame akan
berubah warna sesuai dengan warna yang dipilih.
1.5 Program 6-5. Shapes2.java
- Source Code
package modul6;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
*
* @author acer
*/
public class Shapes2 extends JPanel{
int xPoints[] = new int[] {300, 420, 360};
int yPoints[] = new int[] {120, 120, 20};
public Shapes2(){
setLayout(null);
setSize(600,180);
}
public void paint(Graphics g) {
g.fillArc(20, 20, 100, 100, 180, 180);
g.fillOval(150, 20, 120, 100);
g.fillPolygon(xPoints, yPoints, 3);
g.fillRect(450, 20, 100, 100);
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
JFrame frame = new JFrame("Shapes");
Shapes2 shapes = new Shapes2();
frame.setLayout(null);
frame.add(shapes);
frame.setSize(600, 180);
frame.setVisible(true);
}
- Tampilan Program
Gambar 6 Tampilan Shapes2.java
- Analisa
Gambar di atas merupakan tampilan dari hasil compile program
Shapes2. Program ini membuat suatu objek dari kelas graphic Jframe.
Pada frame ini terdapat beberapa objek berbentuk bangun datar yang
terdiri dari setengah lingkaran, lingkaran, segitiga, dan persegi.
1.6 Program 6-6. Shapes3.java
- Source Code
package modul6;
import java.awt.BasicStroke;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.geom.Arc2D;
import java.awt.geom.Line2D;
import java.awt.geom.Line2D.Double;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
*
* @author acer
*/
public class Shapes3 extends JPanel{
final static float dash1[] = {10.0f};
final static BasicStroke dashed= new
BasicStroke(1.0f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MI
TER,10.0f, dash1, 0.0f);
final static BasicStroke wideStroke = new
BasicStroke(8.0f);
public Shapes3() {
setLayout(null);
setSize(600,180);
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.draw(new Line2D.Double(20, 120, 130, 20));
g2.draw(new Rectangle2D.Double(150, 20, 130,
100));
g2.setStroke(dashed);
g2.draw(new RoundRectangle2D.Double(300, 20,
130,100, 10, 10));
g2.setStroke(wideStroke);
g2.draw(new Arc2D.Double(450, 50, 130, 50, 90,
135,Arc2D.OPEN));
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
JFrame frame = new JFrame("Shapes");
Shapes3 shapes = new Shapes3();
frame.setLayout(null);
frame.add(shapes);
frame.setSize(600,180);
frame.setVisible(true);
}
- Tampilan Program
Gambar 7 Tampilan Shapes3.java
- Analisa
Gambar di atas merupakan tampilan dari hasil compile program
Shapes3. Program ini membuat suatu objek dari kelas graphic Jframe.
Pada frame ini terdapat beberapa objek yang terbentuk dari garis, seperti
garis putus-putus, persegi yang bergaris, dan juga garis yang bentuknya
tidak beraturan.
1.7 Program 6-7. ShapesJPanel.java
- Source Code
package modul6;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.BasicStroke;
import java.awt.GradientPaint;
import java.awt.TexturePaint;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import java.awt.geom.Arc2D;
import java.awt.geom.Line2D;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
/**
*
* @author acer
*/
public class ShapesJPanel extends JPanel{
public void paintCompunent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setPaint(new GradientPaint(5, 30,Color.BLUE,
35, 100, Color.YELLOW, true));
g2d.fill(new Ellipse2D.Double(5, 30,65, 100));
g2d.setPaint(Color.RED);
g2d.setStroke(new BasicStroke(10.0f));
g2d.draw(new Rectangle2D.Double(80, 30,65,100));
BufferedImage buffImage = new BufferedImage(10,
10, BufferedImage.TYPE_INT_RGB);
Graphics2D gg =
buffImage.createGraphics();gg.setColor(Color.YELLOW);
gg.fillRect(0, 0, 10, 10);
gg.setColor(Color.BLACK);
gg.drawRect(1, 1, 6, 6);
gg.setColor(Color.BLUE);
gg.fillRect(1, 1, 3, 3);
gg.setColor(Color.RED);
gg.fillRect(4, 4, 3, 3);
g2d.setPaint(new TexturePaint(buffImage,new
Rectangle(10,10)));
g2d.fill(new
RoundRectangle2D.Double(155,30,75,100,50,50));
g2d.setPaint(Color.WHITE);
g2d.setStroke(new BasicStroke(6.0f));
g2d.draw(new Arc2D.Double(240, 30,75,100, 0, 270,
Arc2D.PIE));
g2d.setPaint(Color.GREEN);
g2d.draw(new Line2D.Double(395,30,320,150));
float dashes[] = {10};
g2d.setPaint(Color.YELLOW);
g2d.setStroke(new
BasicStroke(4,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUN
D, 10,dashes, 0));
g2d.draw( new Line2D.Double(320,30,395,150));
}
}
- Tampilan Program
Gambar 8 Tampilan ShapesJPanel.java
- Analisa
Gambar di atas merupakan tampilan dari hasil compile program
ShapesJPanel. Program ini tidak bisa dieksekusi dikarenakan program ini
tidak memiliki main method.
1.8 Program 6-8. Shapes.java
- Source Code
package modul6;
import javax.swing.JFrame;
/**
*
* @author acer
*/
public class Shapes {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
JFrame frame = new JFrame("Drawing 2d Shapes");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ShapesJPanel ShapesJPanel = new
ShapesJPanel();frame.add( ShapesJPanel);
frame.setSize(425, 200);
frame.setVisible(true);
}
- Tampilan Program
Gambar 9 Tampilan Shapes.java
- Analisa
Gambar di atas merupakan tampilan dari hasil compile program
Shapes. Program ini merupakan main method dari program 6-7, dimana
class ShapesJPanel akan dipanggil dan dieksekusi.
1.9 Program 6-9. StrokeAndFill.java
- Source Code
package modul6;
import java.lang.Integer;
import java.awt.*;
import java.awt.event.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import javax.swing.*;
/**
*
* @author acer
*/
public class StrokeAndFill extends JApplet implements
ItemListener{
JLabel primLabel, lineLabel, paintLabel, strokeLabel;
ShapePanel display;
static JComboBox primitive, line, paint, stroke;int
index = 0;
public static boolean no2D = false;
public void init() {
GridBagLayout layOut = new GridBagLayout();
getContentPane().setLayout(layOut);
GridBagConstraints c = new GridBagConstraints();
c.weightx = 1.0;c.fill = GridBagConstraints.BOTH;
primLabel = new
JLabel();primLabel.setText("Primitive");
Font newFont = getFont().deriveFont(1);
primLabel.setFont(newFont);
primLabel.setHorizontalAlignment(JLabel.CENTER);
layOut.setConstraints(primLabel, c);
getContentPane().add(primLabel);
lineLabel = new
JLabel();lineLabel.setText("Lines");
lineLabel.setFont(newFont);
lineLabel.setHorizontalAlignment(JLabel.CENTER);
layOut.setConstraints(lineLabel, c);
getContentPane().add(lineLabel);
c.gridwidth = GridBagConstraints.RELATIVE;
paintLabel = new JLabel();
paintLabel.setText("Paints");
paintLabel.setFont(newFont);
paintLabel.setHorizontalAlignment(JLabel.CENTER);
layOut.setConstraints(paintLabel, c);
getContentPane().add(paintLabel);
c.gridwidth = GridBagConstraints.REMAINDER;
strokeLabel = new JLabel();
strokeLabel.setText("Rendering");
strokeLabel.setFont(newFont);
strokeLabel.setHorizontalAlignment(JLabel.CENTER);
layOut.setConstraints(strokeLabel, c);
getContentPane().add(strokeLabel);
GridBagConstraints ls = new GridBagConstraints();
ls.weightx = 1.0;
ls.fill = GridBagConstraints.BOTH;
primitive = new JComboBox(
new Object []{
"rectangle",
"ellipse",
"text"
});
primitive.addItemListener(this);
newFont = newFont.deriveFont(0, 14.0f);
primitive.setFont(newFont);
layOut.setConstraints(primitive, ls);
getContentPane().add(primitive);
line = new JComboBox( new Object []{
"thin",
"thick",
"dashed"
});
line.addItemListener(this);
line.setFont(newFont);
layOut.setConstraints(line, ls);
getContentPane().add(line);
ls.gridwidth = GridBagConstraints.RELATIVE;
paint = new JComboBox( new Object[]{
"solid",
"gradient",
"polka"
});
paint.addItemListener(this);
paint.setFont(newFont);
layOut.setConstraints(paint, ls);
getContentPane().add(paint);
ls.gridwidth = GridBagConstraints.REMAINDER;
stroke = new JComboBox( new Object[]{
"Stroke",
"Fill",
"Stroke & Fill"
});
stroke.addItemListener(this);
stroke.setFont(newFont);
layOut.setConstraints(stroke, ls);
getContentPane().add(stroke);
GridBagConstraints sC = new GridBagConstraints();
sC.fill = GridBagConstraints.BOTH;
sC.weightx = 1.0;sC.weighty = 1.0;
sC.gridwidth =
GridBagConstraints.REMAINDER;display = new ShapePanel();
layOut.setConstraints(display, sC);
display.setBackground(Color.white);getContentPane().add(d
isplay);validate();
}
public void itemStateChanged(ItemEvent e){
display.renderShape();
}
/**
* @param args the command line arguments
*/
public static void main(String[] argv) {
// TODO code application logic here
if ( argv.length > 0 && argv[0].equals( "-no2d" )
) {
StrokeAndFill.no2D = true;
}
JFrame frame = new JFrame( "StrokeAndFill" );
frame.addWindowListener( new WindowAdapter(){
public void windowClosing( WindowEvent e ){
System.exit( 0 );
}
});
JApplet applet = new StrokeAndFill();
frame.getContentPane().add( BorderLayout.CENTER,applet );
applet.init();
frame.setSize( 450, 250 );frame.show();
}
}
class ShapePanel extends JPanel {
BasicStroke bstroke = new BasicStroke(3.0f);
int w, h;
Shape shapes[] = new Shape[3];
public ShapePanel(){
setBackground(Color.white);
shapes[0] = new Rectangle(0, 0, 100, 100);
shapes[1] = new Ellipse2D.Double(0.0, 0.0,
100.0,100.0);
TextLayout textTl = new TextLayout("Text",
new Font("Helvetica", 1,96),new FontRenderContext(null,
false, false));
AffineTransform textAt = new
AffineTransform();
textAt.translate(0,
(float)textTl.getBounds().getHeight());
shapes[2] = textTl.getOutline(textAt);
}
public void renderShape() {
repaint();
}
public void paintComponent (Graphics g) {
super.paintComponent(g);
if ( !StrokeAndFill.no2D ) {
Graphics2D g2 = (Graphics2D) g;
Dimension d = getSize();
w = d.width;
h = d.height;
int width, height;
String instruct ="Pick a primitive, line
style, paint, andrendering method.";
TextLayout thisTl = new
TextLayout(instruct, new Font("Helvetica",0,
10),g2.getFontRenderContext());
Rectangle2D bounds = thisTl.getBounds();
width = (int)bounds.getWidth();
thisTl.draw(g2, w/2-width/2, 20);
Stroke oldStroke = g2.getStroke();
switch
( StrokeAndFill.line.getSelectedIndex() ) {
case 0 : g2.setStroke(new
BasicStroke(3.0f));
break;
case 1 : g2.setStroke(new
BasicStroke(8.0f));
break;
case 2 : float dash[] = {10.0f};
g2.setStroke(new
BasicStroke(3.0f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MI
TER,10.0f, dash, 0.0f));
break;
}
Paint oldPaint = g2.getPaint();
switch
( StrokeAndFill.paint.getSelectedIndex() ) {
case 0 : g2.setPaint(Color.blue);
break;
case 1 : g2.setPaint(new
GradientPaint(0, 0,Color.lightGray,w-250, h,Color.blue,
false));
break;
case 2 : BufferedImage bi =new
BufferedImage(5, 5,BufferedImage.TYPE_INT_RGB);
Graphics2D big = bi.createGraphics();
big.setColor(Color.blue);
big.fillRect(0, 0, 5, 5);
big.setColor(Color.lightGray);
big.fillOval(0, 0, 5, 5);
Rectangle r = new Rectangle(0,0,5,5);
g2.setPaint(new TexturePaint(bi, r));
break;
}
Shape shape=
shapes[StrokeAndFill.primitive.getSelectedIndex()];
Rectangle r = shape.getBounds();
AffineTransform saveXform =
g2.getTransform();
AffineTransform toCenterAt = new
AffineTransform();
toCenterAt.translate(w/2-(r.width/2),
h/2-(r.height/2));
g2.transform(toCenterAt);
switch
( StrokeAndFill.stroke.getSelectedIndex() ){
case 0 : g2.draw(shape);
break;
case 1 : g2.fill(shape);
break;
case 2 : Graphics2D tempg2 =
g2;g2.fill(shape);
g2.setColor(Color.darkGray);
g2.draw(shape);
g2.setPaint(tempg2.getPaint());
break;
}
g2.setTransform(saveXform);
g2.setStroke(oldStroke);
g2.setPaint(oldPaint);
} else {
g.drawRect(0, 0, 100, 100);}
}
}
- Tampilan Program
Gambar 10 Tampilan StrokeAndFill.java
- Analisa
Gambar di atas merupakan tampilan dari hasil compile program
StrokeAndFill. Program ini menggunakan ActionListener yang dimana
extend JApplet dan implements yang terdapat pada itemListener akan
menampilkan output berupa frame yang di dalamnya terdapat beberapa
panel, button, dan item listener. Tampilan dapat diubah sesuai dengan
keinginan.
BAB II
KESIMPULAN
Pada modul 6 ini, saya mempelajari tentang Graphics 2D pada
java. Dengan menggunakan Graphics 2D java ini, saya dapat membuat
objek berupa bangun datar, garis, mengubah warna frame ataupun tulisan,
membuat button yang dapat mengubah warna apabila diklik. Dan pada
praktikum kali ini, saya belajar mengenai action listener pada java.