Solved

draw thick line method

Posted on 2001-08-21
9
1,818 Views
Last Modified: 2012-06-21
I think this is a fairly simple thing to do, but I can't find the method to use.

I need to draw a line with a thickness (in pixels) determined by me.  But I've looked at drawLine() and drawPolyLine() in java.awt.graphics.  But they can't be used to specify thickness.

What method can I use?
0
Comment
Question by:YamSeng
9 Comments
 
LVL 27

Expert Comment

by:rrz
ID: 6410560
Can you use Java2D ? If so look at BasicStroke.
0
 
LVL 1

Author Comment

by:YamSeng
ID: 6410605
I'm just looking at java.awt.graphics, no higher levels.
0
 
LVL 19

Expert Comment

by:Jim Cakalic
ID: 6410779
You must draw several lines next to each other to create the effect of one thick line. Here is a method, untested by me, which claims to encapsulate the needed functionality.

void thickLine(Graphics g, Color c, int x1, int y1, int x2, int y2, int thickness) {
    // Method thickLine to draw a thick line in a specified color
    int height, width;
    boolean mostlyHorizontal;

    // Compute height and width of line; check whether line is more horizontal or vertical
    height = y2 - y1;
    if (height < 0) {
        height = -height;
    }
    width = x2 - x1;
    if (width < 0) {
        width = -width;
    }
    mostlyHorizontal = width > height;

    // Draws line repeatedly to desired thickness and color
    g.setColor(c);
    for (int i=0; i<thickness; ++i) {
        if (mostlyHorizontal) {
            g.drawLine(x1, y1 + i, x2, y2 + i);
        } else {
            g.drawLine(x1 + i, y1, x2 + i, y2);
        }
    }
}

Hope this helps.

Best regards,
Jim Cakalic
0
 
LVL 19

Accepted Solution

by:
Jim Cakalic earned 30 total points
ID: 6410793
Also, here's a link to a GraphicsUtil class that appeared in the book Core Web Programming. It has a drawLine method with a similar signature to the one I posted above. It differs in that it computes the polygon that corresponds to the thick line and then draws a filled polygon. I would tend to trust this solution, knowing its source, than the one above.
    http://www.apl.jhu.edu/~hall/java/GraphicsUtil.html (javadoc)
    http://www.apl.jhu.edu/~hall/java/GraphicsUtil.java (code)

Jim

0
Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

 
LVL 1

Author Comment

by:YamSeng
ID: 6412084
hmm....that's how I thought of initially....(drawing many lines), but I thought it would be inefficient....

haha....but I think that may be the way to go since I only want to use java.awt.graphics.

let me try it out.
cheers!
0
 
LVL 1

Author Comment

by:YamSeng
ID: 6412965
What do you guys think of drawing a filled rectangle?

Wouldn't that look like a thick line as well?
0
 
LVL 19

Expert Comment

by:Jim Cakalic
ID: 6413254
Hi. Take a look again at the links in my second post. The drawLine method of the GraphicsUtil package computes the points for a closed polygon that outlines a line with a given thickness and then draws a filled polygon to simulate the line.

Jim
0
 
LVL 2

Expert Comment

by:Tom7
ID: 6426138
YamSeng, a filled rectangle also works, but ONLY for horizontal and vertical lines.

Tom
0
 
LVL 1

Author Comment

by:YamSeng
ID: 6435868
Thanks Jim.  Finally worked out how the method did it with the help of my maths textbook.....well, I wanted to know what's happening in that method.....instead of just using it blindly......

Hmm.....looks like computer graphics seems to require some form of maths background....

cheers!
YamSeng
0

Featured Post

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

Join & Write a Comment

Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
Java functions are among the best things for programmers to work with as Java sites can be very easy to read and prepare. Java especially simplifies many processes in the coding industry as it helps integrate many forms of technology and different d…
Viewers learn about the “while” loop and how to utilize it correctly in Java. Additionally, viewers begin exploring how to include conditional statements within a while loop and avoid an endless loop. Define While Loop: Basic Example: Explanatio…
Video by: Michael
Viewers learn about how to reduce the potential repetitiveness of coding in main by developing methods to perform specific tasks for their program. Additionally, objects are introduced for the purpose of learning how to call methods in Java. Define …

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now