Solved

draw thick line method

Posted on 2001-08-21
9
1,820 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
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
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
 
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

Optimizing Cloud Backup for Low Bandwidth

With cloud storage prices going down a growing number of SMBs start to use it for backup storage. Unfortunately, business data volume rarely fits the average Internet speed. This article provides an overview of main Internet speed challenges and reveals backup best practices.

Question has a verified solution.

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

Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
Viewers learn about the “for” loop and how it works in Java. By comparing it to the while loop learned before, viewers can make the transition easily. You will learn about the formatting of the for loop as we write a program that prints even numbers…
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 …

772 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