Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

draw thick line method

Posted on 2001-08-21
9
Medium Priority
?
1,828 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
9 Comments
 
LVL 28

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
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 19

Accepted Solution

by:
Jim Cakalic earned 120 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
 
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

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This was posted to the Netbeans forum a Feb, 2010 and I also sent it to Verisign. Who didn't help much in my struggles to get my application signed. ------------------------- Start The idea here is to target your cell phones with the correct…
Introduction This article is the first of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article explains our test automation goals. Then rationale is given for the tools we use to a…
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.
Suggested Courses

618 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