2015-05-09 3 views
-2

Моя программа должна нарисовать простую строку на панели Swing. Все остальное отлично, за исключением одной ошибки, вызванной командой drawLine. Это мой код:Ошибка создания Java-кода при создании строки с помощью java.awt.Graphics

public static void main(String[] args) { 
    JFrame f = new JFrame("Swing Paint Demo"); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.pack(); 
    f.setVisible(true); 
    Graphics.drawLine(20,20,20,20); 
    } 
} 

Он производит ошибку: Не удается сделать статическую ссылку на нестатической метод DrawLine (интермедиат, Int, Int, Int) от графика типа.

Любые идеи?

Заранее спасибо

+4

Вы пытаетесь выполнить графическое программирование, не читая учебник, просто составляя код, и это никогда не будет работать. Прочтите учебник. Вот для чего это. Вы можете найти ссылки на обучающие материалы Swing и на другие ресурсы Swing: [Swing Info] (http://stackoverflow.com/tags/swing/info) –

ответ

2

Вам нужно создать класс, который расширяет свинг виджет (я предполагаю, что JPanel в данном случае), что вы хотите сделать на, и переопределить paintComponent() метод (который наследуется от родительский класс почти всех компонентов поворота - JComponent).

Что-то, как это будет делать:

protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    g.drawLine(20, 20, 20, 20); 
} 

EDIT: Причина вашей ошибки в том, что вы пытаетесь использовать методы из класса Graphics напрямую, а не из экземпляра этого. Класс Graphics сам по себе ничего не знает о вашем приложении swing и не знает, как рисовать на нем. Лучшее объяснение static можно найти here. Учебник по качанию, связанный с выше, также заслуживает внимания.

+0

Хотя это правда, это больше похоже на то, что OP нуждается в обзоре основных уроков по как работают классы и объекты. – Radiodef

+0

'paintComponent' должен быть' protected' not 'public', так как вы никогда не должны увеличивать видимость унаследованного метода без необходимости. Также вы должны лучше объяснить, какие классы имеют этот метод и наследовать. Вы заявляете, что он должен «создать класс, который расширяет объект swing», но что такое «объект Swing»? Это будет очень непонятно новичкам. –