Как передать в Canvas Graphics
Пытаюсь сделать так, но он выдает что то не понятное
Graphics g = c.getGraphics();
g.drawRect(0, 0, 50, 50);
c.paint();
Вот такую ошибку
Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.0.0:exec (default-cli) on project JavaDRaw: Command execution failed.: Process exited with an error: 1 (Exit value: 1) -> [Help 1]
To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.
For more information about the errors and possible solutions, please read the following articles:
[Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
Делал это, и оно работает, но как-то криво хотелось бы напрямую взаимодействовать с Graphics g
Canvas c = new Canvas(){
@Override
public void paint(Graphics g){
g.drawLine(10, 10, 180, 180);
g.setColor(Color.BLUE);
g.drawOval(50, 50, 30, 30);
}
};
Вот весь код
public class JavaDrawing{
static Canvas c = new Canvas();
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setSize(640, 480);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Graphics g = c.getGraphics();
g.create();
g.drawRect(0, 0, 50, 50);
c.paint();
frame.add(c);
frame.setVisible(true);
}
}
Ответы (1 шт):
Автор решения: doodocina
→ Ссылка
Для начала Вам следует использовать JPanel т.к. вы используете JFrame который относиться к пакету javax.swing, а Canvas к java.awt. Если хотите использовать Canvas то возьмите вместо JFrame обычный Frame или Window.
Код для JFrame и JPanel:
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main
{
public static void main(String[] args)
{
JFrame f = new JFrame();
Panel p = new Panel();
f.setSize(640, 480);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(p);
f.setVisible(true);
}
}
class Panel extends JPanel
{
@Override
public void paintComponent(Graphics g)
{
g.fillRect(0, 0, 100, 100);
}
}
Или сокращенный вариант в "вашем стиле":
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main
{
public static void main(String[] args)
{
JFrame f = new JFrame();
JPanel p = new JPanel()
{
@Override
public void paintComponent(Graphics g)
{
g.fillRect(0, 0, 100, 100);
}
};
f.setSize(640, 480);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(p);
f.setVisible(true);
}
}