为什么java swing drawLine没有正确的宽度?

时间:2014-08-15 09:32:40

标签: java swing line draw graphic

我正在写一些简单的java图形应用程序。这是我的问题:

package graphic;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class TestFrame extends JFrame {
    private static final long serialVersionUID = 1L;
    private JPanel panel;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TestFrame frame = new TestFrame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public TestFrame() {
        setTitle("Test Example");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        panel = new JPanel(){
            private static final long serialVersionUID = 1L;

            @Override
            public void paintComponent(Graphics g){
                super.paintComponent(g);
                final int MAX = 100;

                //Draw grid
                for (int i = 0; i < MAX; i++)
                    if (i % 2 == 0){
                        g.drawLine(0, i, MAX, i);
                        g.drawLine(i, 0, i, MAX);
                    }

                g.setColor(Color.RED);
                g.drawLine(0, 0, 0, 0);//width = 1
                g.drawLine(0, 2, 1, 2);//width = 2
                g.drawLine(0, 4, 2, 4);//width = 3
                g.drawLine(0, 6, 3, 6);//width = 4


            }
        };

        panel.setBorder(new EmptyBorder(5, 5, 5, 5));
        panel.setLayout(new BorderLayout(0, 0));
        setContentPane(panel);

    }

}

我在JPanel中画了4行。结果如下: enter image description here 但第二行采用3“方形像素”,而x1 = 0,x2 = 1则线宽仅为2平方? 第3行和第4行也存在同样的问题。 谁能为我解释一下?感谢

2 个答案:

答案 0 :(得分:2)

无论

  1. 有些东西搞砸了你的图形系统。也许你的屏幕上有某种放大或缩放。

  2. 运行时实现中存在一个错误。如果是这样,您可能想要提交错误并指定您的操作系统和运行时。

  3. 这是我系统的结果:

    enter image description here

答案 1 :(得分:0)

它在我的(Windows)系统上正确显示。但是,我建议在paintComponent方法中添加以下行:

Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);

(将行程控制设置为纯可以清理某些粗糙的光栅化。)