我不熟悉java Graphics,我想在3个按钮上画一条线。我找到了一些绘制线条的方法,但没有一种方法将它绘制在按钮之上。
这是我的GUI类
public class GUI extends JFrame{
JButton[] buttons;
GUI()
{
setSize(255, 390);
setLocation(0, 0);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
setVisible(true);
}
public void paint(Graphics g) {
super.paint(g);
//TODO add the line
}
void drawButtons()
{
buttons=new JButton[9];
int x=5,y=80;
for(int i=0;i<buttons.length;i++)
{
buttons[i]=new JButton("");
buttons[i].setSize(70,70);
buttons[i].setLocation(x,y);
buttons[i].setFont(new Font("Arial", Font.PLAIN, 45));
buttons[i].setBorder(BorderFactory.createBevelBorder(1,Color.black,Color.black));
y+=(i%3==2)?75:0;
x=(i%3==2)?5:x+75;
add(buttons[i]);
}
}
}
简单地说,我想创建一个创建一条线的函数,并将该线的位置作为参数获取。我希望这条线位于按钮之上。我怎样才能做到这一点?提前谢谢。
答案 0 :(得分:2)
我希望线条位于按钮之上。
考虑使用Glass pane进行自定义绘制,重写其paintComponent
方法,以便在JFrame
之上进行绘制。例如:
public class CustomGlassPane extends JPanel{
public CustomGlassPane(){
setOpaque(false);
}
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.RED);
g.drawLine(10, 100, 2000, 100);
}
}
然后,您将设置JFrame
setGlassPane(new CustomGlassPane());
getGlassPane().setVisible(true);
另外,我还建议不要使用null
布局 - 选择最适合您布局的LayoutManager(并注意您可以嵌套布局)。我还建议覆盖paintComponent
而不是paint
(如您发布的代码尝试的那样)。
答案 1 :(得分:2)
查看A Closer Look at the Painting Mechanism上的Swing教程中的部分。
正如您所看到的,JPanel将调用paintChildren(...)
方法。因此,您可以覆盖此方法以在面板的子项之上绘制线条:
@Override
protected void paintChildren(Graphics g)
{
super.paintChildren(g);
// paint the line here
}
更好的选择是使用专门为此设计的JLayer。阅读Decorating Components With JLayer上Swing教程中的部分,了解更多信息和示例。