#java #2d
#java #2d
Вопрос:
вот мой код:
import java.awt.*;
class g
{
public static void main(String arg[])
{
System.out.println("hello");
Rectangle rec=new Rectangle(4,4);
Graphics2D.draw(rec);
}
}
когда я пытаюсь скомпилировать это, я получаю это:
на нестатический метод draw (java.awt.Shape) нельзя ссылаться из статического контекста
это меня смущает. Почему это происходит? Если Graphics2D является абстрактным классом, как Graphics2D.draw(формы) может быть нестатичным?
Комментарии:
1. Нет. Это не статический метод. download.oracle.com/javase/1.4.2/docs/api/java/awt / … . Серьезно, что это за вопрос? Доверяете ли вы своей интуиции больше, чем компилятору и документации?
2. Что ж, в тексте ошибки указано все, что необходимо.
3. на самом деле я неправильно прочитал документацию, извините.
Ответ №1:
Если бы Graphics2D.draw
был статическим, где вы ожидали бы отрисовки прямоугольника? Верхний, левый угол вашего монитора? Текущее активное окно? Внутри нового окна?
Graphics2D.draw
не является статичным, потому что существует много графических контекстов, в которых вы могли бы рисовать. Объясните нам, где вы ожидаете отрисовки прямоугольника, и мы поможем вам получить соответствующий Graphics2D
объект в соответствии с вашими потребностями.
Если вы хотите узнать о графике, вы должны уметь делать что-то вроде этого:
public class MyGraphicsFun {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(800, 600);
frame.add(
new JComponent() {
public Dimension getPreferredSize() {
return new Dimension(800, 600);
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.RED);
// Any other drawing you want...
}
}
);
frame.setVisible(true);
}
}
Отказ от ответственности: Этот код был написан из памяти, поэтому в нем могут быть ошибки
Комментарии:
1. Я пытаюсь узнать о графике, поэтому я не уверен, что я хочу делать? Давайте пока рассмотрим мой монитор. Какие у меня есть варианты?
2. @David: Вы можете рисовать на экране, вы можете рисовать в окне, вы можете рисовать в определенном компоненте внутри окна (как в моем примере), вы можете рисовать в буфере в памяти, вы можете рисовать в файле, вы можете рисовать в сеансе X Windows… Множество вариантов. 🙂
3. Чтобы заставить его скомпилироваться, мне пришлось добавить import javax.swing.*; import java.awt.*;; в начало, а затем, когда я запускаю его, я просто получаю серое окно, это все, что оно должно было делать? кстати, спасибо за пример кода.
4. @David: Да, это рисует только серое окно. Но теперь это окно — ваш холст. Вы можете вызывать методы на
g2
, и они должны появиться в этом окне.5. @David: Замените
// Any other drawing you want...
своим собственным кодом. Например, вы можете поместитьg2.draw(new Rectangle(4, 4));
туда, и он должен нарисовать небольшой прямоугольник. Если это не сработает, попробуйте прямоугольник большего размера.
Ответ №2:
Не в этом javadocs:
http://download.oracle.com/javase/6/docs/api/
На какой из них вы смотрите?
Кроме того, почему вы не верите компилятору? Какой смысл не соглашаться, если вы никогда не пропустите это через компилятор? Просто делайте то, что там сказано, и продолжайте в том же духе.
Ты говоришь как потерянная душа. Начните с этого: