我想在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());
}
答案 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);
}
}
我允许您修改代码,以便从一个组件的中心到另一个组件的中心绘制线条。