我在使用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);
}
答案 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()方法的单个语句。
真正的问题是你为什么要在标签上画这条线?如果我们了解真正的要求,我相信有更好的解决方案。你不应该硬编码线的位置/大小,因为你不知道标签的大小。