用JLabel绘图

时间:2016-08-23 13:04:28

标签: java swing drawing

我在使用JFrame应用程序时遇到问题。我有这两个功能:

我对Java中的这些图形很新,我想知道是否有人会善良并帮助我。我需要在JLabel上添加名为areaImage的行。我尝试使用我在这里找到的一些完成的代码,但没有一个对我有效。我的代码是否可用于一些错误?还是完全不好?

请不要只发布一些代码的链接,我不熟悉它,然后更改它,以便它适合我的应用程序...

这个只是制作窗口,添加组件:

public void game (int difficulty)
{
    getContentPane().removeAll();

    areaImage = new JLabel ();
    areaImage.setBounds (50,100,650,500);
    areaImage.setForeground(Color.WHITE);   
    areaImage.setBorder(BorderFactory.createMatteBorder(2,2,2,2,Color.BLACK));
    add(areaImage);

    paint (100,120,500,500, null);

    info = new JLabel ("  Write your answer into the text field");
    info.setBounds(730,180,250,50);
    info.setBorder(BorderFactory.createMatteBorder(2,2,2,2,Color.BLACK));
    info.setFont(new Font ("Arial", Font.PLAIN, 15));
    areaImage.setForeground(Color.red);
    add(info);

    inputField = new JTextField("");
    inputField.setBounds(810, 240, 80, 50);
    add(inputField);

    checkAnswer = new JButton ("Check");
    checkAnswer.setBounds(750, 330, 200, 50);
    checkAnswer.setContentAreaFilled(false);
    checkAnswer.setOpaque(false);
    checkAnswer.addActionListener(this);
    checkAnswer.setFont (new Font("Arial",Font.PLAIN, 30));
    add(checkAnswer);

    next = new JButton ("Next");
    next.setBounds(750,440,200,50);
    next.setContentAreaFilled(false);
    next.setOpaque(false);
    next.addActionListener(this);
    next.setFont (new Font("Arial",Font.PLAIN, 30));
    add(next);

    end= new JButton ("Exit");
    end.setBounds (750,550,200,50);
    end.setFont(new Font("Arial", Font.PLAIN, 30));
    end.addActionListener(this);
    end.setOpaque(false);
    end.setContentAreaFilled(false);
    add(end);

    revalidate();
    repaint();
}

这是绘图功能:

private void paint (int x, int xx, int y, int yy, Graphics g)
{
   super.paint(g);
   Graphics2D g2 = (Graphics2D) g;
   g.drawLine(x,y,xx,yy);
   Line2D lin = new Line2D.Float(100, 100, 250, 260);
   g2.draw(lin);
}

1 个答案:

答案 0 :(得分:2)

Please dont just post a link with some code, Im not skilled enough to understand it

这就是你学习的方式。您不能指望我们调试您的代码并在每次遇到一些问题时重写它。如果你不愿意通过演示工作实例来学习,那么我不确定我们如何能够帮助你。

  

我需要在JLabel

上添加这一行

然后您需要覆盖JLabel的绘制代码。你永远不应该直接调用绘画方法,因为下次Swing确定需要重新绘制组件时,绘画将会丢失。

首先,学习如何正确地进行绘画。在Custom Painting的Swing教程中有一个工作示例。第一个例子只是在面板上绘制一个字符串,但它很容易让你在标签上画一条线。它是您添加到paintComponent()方法的单个语句。

真正的问题是你为什么要在标签上画这条线?如果我们了解真正的要求,我相信有更好的解决方案。你不应该硬编码线的位置/大小,因为你不知道标签的大小。