Manage your account and access personalized content. Sign up for an Oracle Account. Access your cloud dashboard, manage orders, and more. Sign up for a free trial. Home Skip to Content Skip to Search. Sign In Account. Oracle Account Manage your account and access personalized content.
Sign up for an Oracle Account Sign in to my Account. Sign in to Cloud Access your cloud dashboard, manage orders, and more. Sign up for a free trial Sign in to Cloud. Java SE. The Java 2D API is a set of classes for advanced 2D graphics and imaging, encompassing line art, text, and images in a single comprehensive model.
The API provides extensive support for image compositing and alpha channel images, a set of classes to provide accurate color space definition and conversion, and a rich set of display-oriented imaging operators. JavaDesktop The JavaDesktop community of java. Don't miss the news, features, and forums! The Java Games community of java. These discussion forums allow you to exchange information about various Java APIs with other users.
Sun Tech Days - Advance your development skills with in-depth technical training. Attend in a city near you. Also available in PDF format. The Java 2D team reads messages sent to this list. Before sending questions to the list, please consult the FAQ View our email archive.
The dark mode beta is finally here. Change your preferences any time. Stack Overflow for Teams is a private, secure spot for you and your coworkers to find and share information.
Assuming we always use a Sun JVM say, 1. I haven't seen it cause any problems yet and, to my understanding, the Graphics class is legacy code but the Java designers didn't want to change the interfaces for Swing and AWT classes in order to preserver backwards compatibility. According to the discussion hereit is always safe to cast from Graphics to Graphics2D.
However I am not able to quickly find the official Sun statement on this. Another hint here with the same conclusion. Exceptions from this are printing and Swing's DebugGraphics object. So as long as none of these situations apply to your code it is safe to cast to Graphics2D. Both of the authors worked at Sun, so I would assume that they know what they are talking about.
The 2D Graphics Trail says:. For example:. This is the most "official" source I could find. Coming straight from Sun's Java Tutorials, I'd say that this is the officially sanctioned way of doing it.
I wouldn't have exactly minded if the JavaDocs spelled this out, though Learn more. Asked 11 years, 6 months ago. Active 3 years, 6 months ago. Viewed 14k times. Outlaw Programmer Outlaw Programmer 9, 7 7 gold badges 40 40 silver badges 60 60 bronze badges. Active Oldest Votes. Jorge Ferreira Jorge Ferreira 84k 23 23 gold badges silver badges bronze badges. Thanks for the references.
I'm going to accept this one even though it doesn't directly cite a Sun source because I think it's close enough. Roland Schneider Roland Schneider 3, 3 3 gold badges 28 28 silver badges 42 42 bronze badges. MathiasKegelmann MathiasKegelmann 2 2 silver badges 2 2 bronze badges.
Sign up or log in Sign up using Google. Sign up using Facebook. Sign up using Email and Password. Post as a guest Name.The Java library includes a simple package for drawing 2D graphics, called java. There are several ways to create graphics in Java; the simplest way is to use java. Canvas and java. A Canvas is a blank rectangular area of the screen onto which the application can draw. The Graphics class provides basic drawing methods such as drawLinedrawRectand drawString.
The Drawing class extends Canvasso it has all the methods provided by Canvasincluding setSize. Once the frame is visible, the paint method is called whenever the canvas needs to be drawn; for example, when the window is moved or resized. If you run this code, you should see a black circle on a gray background. You are probably used to Cartesian coordinateswhere x and y values can be positive or negative.
In contrast, Java uses a coordinate system where the origin is in the upper-left corner. That way, x and y are always positive integers. Graphical coordinates are measured in pixels ; each pixel corresponds to a dot on the screen. To draw on the canvas, you invoke methods on a Graphics object. The four parameters specify a bounding boxwhich is the rectangle in which the oval is drawn. To choose the color of a shape, invoke setColor on the Graphics object:.
The setColor method determines the color of everything that gets drawn afterward. Other colors include:. You can create your own colors by specifying the red, green, and blue RGB components. For example:. Each value is an integer in the range 0 darkest to lightest.
You can set the background color of the Canvas by invoking setBackground :. We can use the oval we just drew as the face, and then add two ears. The first line draws the face. The next three lines create a smaller rectangle for the ears. We translate the rectangle up and left for the first ear, then to the right for the second ear.
See the exercises at the end of this appendix for more example drawings. The code for this chapter is in the ap02 directory of ThinkJavaCode. See page??
Before you start the exercises, we recommend that you compile and run the examples. Hint: You should only have to add or modify a few lines of code. Here is an example program that draws a circle using the fillOval method: import java.As Java 1.
Note that although Java 2D has been developed somewhat independently of the other parts of the JFC, it is nonetheless a core part of the 1. We will make the distinction and point out 2D-specific features for discussion, but you should remember that this functionality is just as central to 1. Java 2D extends the previous AWT mechanisms for drawing 2D graphics, manipulating text and fonts, loading and using images, and defining and dealing with colors and color spaces.
Java 2D tutorial
We will be exploring these new mechanisms in this and future columns. I hope to provide other platform-specific tips and tricks where possible, but I will focus on Windows since that's where I will be spending most of my time. When I write a method name, it should always be of the form methodname. The trailing parentheses are meant to set this apart as a method.
The method may or may not take parameters. In practice, the context should always make this clear. Source code listings will be given with line numbers included. I plan to use the line numbers to cross-reference the article text and the code listings as appropriate.
This should also make it much easier for you to annotate the column, should you chose to print a copy. Because I will be writing about many of the Media and Communications APIs in the coming months, I want to make sure that all of the sample code makes sense as a whole as well as in its individual parts. I will attempt to consistently name my examples and place them into sensical packages. Each API or topic that I write about will have at least one subpackage under this top level. For instance, all of the code for this Java 2D article will be in:.
So, to invoke the first example application on Java 2D, you would download the code, put it in your classpath, then use:.
Getting started with Java 2D
If the namespace is too long for your liking or for some other reason you want to use the example code without having to use the fully qualified name, simply comment out the package line at the beginning of each source code file.
I will generate a Java Archive jar file for each article's example code and class files. This archive will be made available in the Resources of each column, should you wish to download it and execute the examples from within the archive.
I will also keep an up-to-date jar file containing all of the code and classes from my current and previous Media Programming columns. This all-encompassing jar file will be available on my personal Web site.This is Java 2D tutorial.
It is aimed at beginners. This tutorial will teach you basics of programming in Java 2D. The images used in this tutorial can be downloaded here. There are two different computer graphics: vector and raster graphics. Raster bitmap graphics represent images as a collection of pixels.
Vector graphics is the use of geometrical primitives such as points, lines, curves or polygons to represent images. These primitives are created using mathematical equations. Both types of computer graphics have advantages and disadvantages. The advantages of vector graphics are:. AWT was the original toolkit for creating user interfaces and graphics in Java. Java 2D is a powerful technology. It can be used to create rich user interfaces, games, animations, multimedia applications, or various special effects.
The custom painting code should be placed in the paintComponent method. This method is invoked when it is time to paint. The paint subsystem first calls the paint method. This method invokes the following three methods: paintComponent paintBorder paintChildren In specific cases, we might want to override the paintBorder or the paintChildren methods.
In most cases, we override the paintComponent method. The paintComponent's sole parameter is a Graphics object. It exposes a number of methods for drawing 2D shapes and obtaining information about the application's graphics environment.An overview of java 2D Graphics
The Graphics2D class extends the Graphics class to provide more sophisticated control over geometry, coordinate transformations, color management, and text layout.
The Graphics object is initialized before it is passed to the paintComponent method, and then it is turned over to the paintBorder and paintChildren methods. This reuse improves performance but it may lead to problems if the painting code permanently changes the Graphics state. Therefore, we must either restore the original settings or work with a copy of the Graphics object.
The copy is created with the Graphics's create method; it must be later released with the dispose method. In practical terms, the copy of the Graphics object does not need to be created if we set the following properties: font, colour, and rendering hints. For all other properties, especially clip, composite operations, and transformationswe must create a copy of the Graphics object and later dispose it.
We draw a text on a JPanel component. Much of the code repeats throughout the Java 2D tutorial. We create a Surface class. This class will be our drawing panel. It inherits from the JPanel component. The Graphics2D class is a fundamental class for rendering graphics in Java 2D.The 2D Graphics group is centered around people interested in the creation and maintenance of the 2D API and implementation. Very briefly, the core of the API is the class java. It provides methods for the rendering operations, as well as controlling the state of the Graphics instance.
Tests should be provided unless clearly infeasible. Automated tests are desirable. SQE rarely run manual tests. Don't give up easily. There are tests that render to a BufferedImage and analyse the resulting contents to see if they behaved correctly, so writing automated tests is possible in more cases than immediately apparent. Code reviews are one of the most important mechanisms we have for integrating and shipping good, solid, compatible code.
Reviews are also an invaluable source of education for all of us, and a great mechanism for ensuring consistent code quality, as we all read and learn from reading each other's code. The standard requirement in Java SE is for one or more reviewer prior to code freeze and two or more reviewers thereafter.
The Java client groups have standardized on two reviewers at all times with few exceptions.
Getting started with Java 2D
The choice of which people review the code is up to the individual engineer and depends upon each specific situation, but some general guidelines are:. It is the responsibility of the implementing engineer to contact the reviewers, respond to their concerns, and make the final code adhere to changes agreed upon by the engineer and the reviewers.
It is the responsibility of the reviewers to provide timely reviews, and understand to the extent possible and agree to the changes that the engineer has implemented; when the code is putback to the workspace, the reviewers are also taking responsibility for these changes.
We can only have good reviews, and good resulting code, if the reviewers take their jobs seriously and review the changes thoroughly. Given the costs and hassles of maintaining backward-compatible code indefinitely, we cannot risk code going in that is only cursorily reviewed; it is far easier and cheaper to catch flaws in the review process than it is to fix them in bugs and escalations later on.
All of the Java 2D's code is in the "jdk" repository, so all references below are relative to the root of the "jdk" workspace. Aside from the information below developers may find it useful to consult Distinguishing 2D and AWT source files. The Java 2D-related java code is can be browsed from Netbeans by opening the "awt2d" project.
All sources are either 'share' or 'windows' or 'solaris', the latter of which in fact includes Linux TM and is so named for historical reasons and because in practice the Solaris TM code and the Linux code are usually so close that a few ifs or ifdefs suffice to distinguish them.
This is partially explained by observing that for 2D, Solaris and Linux are just both platforms for X Most of 2D's code is in 'share'. Even the OpenGL code. But here for brevity we just point out the shared locations. The Java classes are located corresponding to the package hierarchy. Graphics2D is in:. Implementation non-public classes are generally in a package starting with "sun.
Java 2D also has a substantial amount of native code. This is located in similar manner :. The shared code location contains essentially complete implementations of everything since 2D has its own code for everything needed to implement the API.
A more fine grained break down of 2D files, particularly versus AWT component files, can be found here. One can also build the 2d source tree from the "awt2d" Netbeans project both native and java.
Some parts of Java 2D were not part of the initial OpenJDK source release, or are different than in the commercial releases from Sun and its licensees. We want to remove these so that the full OpenJDK can be built entirely from sources. We call this "removing encumbrances", a reference to the legal term "encumbered".
Here's a summary of the major source code encumbrances that were identified and the current state.The most simple graphics primitive is a point. It is a single dot on the window. There is a Point class for representing a point in a coordinate space, but there is no method to to draw a point. To draw a point, we used the drawLine method, where we supplied one point for the both arguments of the method.
The example draws randomly points on the window. A timer is used to draw points in a cycle. A javax. Timer is used to create animation. It fires ActionEvents at the specified interval. Here we draw the point. As we already mentioned, we use the drawLine method. We specify the same point twice. Each action event, we call the repaint method.
It causes the whole client area to be redrawn. When the window is about to be closed, we retrieve the timer and close it with its stop method. Timers not explicitly cancelled may hold resources indefinitely.
But as a good programming practice and as a remainder, we do it nevertheless. A line is a simple graphics primitive.
A line is an object which connects two points. Lines are drawn with the drawLine method. A straight line is drawn. The parameters of the method are the x, y coordinates of the two points. The BasicStroke class defines a basic set of rendering attributes for the outlines of graphics primitives.