JAVA drawLine with Components

时间:2015-10-23 17:27:18

标签: java swing paint

我想在JButton之间画一条线,但我的代码不起作用。 有人可以解释我为什么吗?

/**
 * @param args
 */
public static void main(String[] args) {
    JFrame x=new JFrame("hello");
    GridLayout gl=new GridLayout(3,3,110,100);

    JButton lb[]=new JButton[9];
    for(int i=0; i<9; i++)
        lb[i]=new JButton("two");
    x.setLayout(gl);

    for(int i=0; i<9; i++)
        x.add(lb[i]);
    x.pack();
    x.show();
    Graphics y=x.getGraphics();
    y.drawLine((lb[0].getWidth()+lb[1].getX())/2,0 ,(lb[0].getWidth()+lb[1].getX())/2, x.getHeight());
}

1 个答案:

答案 0 :(得分:1)

 x.show();Graphics y=x.getGraphics();

切勿使用getGraphics(...)进行自定义绘画。一旦Swing重新绘制组件,那幅画就会丢失。

通过覆盖组件的paintComponent()方法来完成自定义绘制。

所以逻辑是在两个组件之间画线,然后调用super.paintComponent(...),按钮被画在线的顶部。

阅读Custom Painting上的Swing教程,以便更好地了解其工作原理和演示代码。

编辑:

绘画代码示例:

@Override
protected void paintComponent(Graphics g)
{
    super.paintComponent(g);

    for (int i = 0; i < getComponentCount() - 1; i++)
    {
        Component component1 = getComponent(i);
        Point point1 = component1.getLocation();
        Component component2 = getComponent(i + 1);
        Point point2 = component2.getLocation();

        g.drawLine(point1.x, point1.y, point2.x, point2.y);
    }
}

我允许您修改代码,以便从一个组件的中心到另一个组件的中心绘制线条。