如何在Swing中绘制垂直线

时间:2014-01-25 07:07:08

标签: java swing

我可以绘制一条水平线,但无法绘制垂直线。请帮我。

 import javax.swing.*;
    import java.awt.*;
    import java.awt.geom.*;

class Success extends JFrame{

    public Success(){
        JPanel panel=new JPanel();
        getContentPane().add(panel);
        setSize(450,450);

        JButton button =new JButton("press");
        panel.add(button);
    }

    public void paint(Graphics g) {
        super.paint(g);  // fixes the immediate problem.
        Graphics2D g2 = (Graphics2D) g;
        Line2D lin = new Line2D.Float(20, 40, 850, 40);
        g2.draw(lin);
    }

    public static void main(String []args){
        Success s=new Success();
        s.setVisible(true);
    }
}

提前致谢。

2 个答案:

答案 0 :(得分:4)

保持x坐标相同并改变y坐标的值,如下所示

Line2D lin = new Line2D.Float(20, 40, 20, 150);

前两个值是该行起点的(x1,y1)值和该行的最后两个值(x2,y2)终点。现在我希望你理解为什么你的代码产生了一条水平线以及绘制垂直线需要做些什么。

答案 1 :(得分:1)

我注意到了一些事情,其中​​一些已被指出:

  1. 要直接回答您的问题,这就是Swing组件的{x,y)坐标this is what the (x, y) coordinates look like for Swing components http://i43.tinypic.com/16ga04i.png保持垂直线的x坐标相同。如果在创建行构造函数时不知道x坐标的位置,请查看构造函数的文档。如果您正在使用Eclipse,这意味着您应该将鼠标悬停在包含构造函数的代码上。
  2. 您的行超出了JFrame的范围;相反,如果您希望它从头到尾,请使用getWidth()getHeight()方法。
  3. 每次重新绘制组件时都不应创建新行。相反,您应该在Success类的某个位置创建行,实现ActionListener,这样您就可以每帧​​更新代码,并在该更新中调整行的大小,然后只重新绘制{{1 }}。
  4. 在这种情况下,您不应该覆盖paintComponent,而您通常不应该这样做。
  5. 您应该覆盖JFrame方法,而不是paintComponent方法。
  6. 我认为你没有正确地进行双缓冲,但我无法帮助你。
  7. 如果要控制其大小,则覆盖JPanel的paint方法很方便,但在这种情况下甚至不需要,因为将其添加到JFrame会自动为您调整大小。
  8. Swing中有很多东西在幕后发生,它可能会让人感到困惑,因为通常你必须明确说出来,但继续玩这个例子,你应该保持安全一段时间。

    getPreferredSize