2013-12-19 2 views
1

общее программирование начинающего здесь, пытаясь выучить Java за школьные каникулы. Делал простые вещи и начал смотреть на графические интерфейсы и рисовать фигуры с помощью графики. Я в основном следил за учебниками и кучами ответов, размещенных здесь.Как нарисовать фигуры из класса в апплет?

У меня возникли проблемы с рисованием фигур из моего класса Draw в мой апплет DrawTest; как показано ниже

import java.awt.*; 
import java.applet.*; 
import javax.swing.*; 

public class DrawTest extends Applet 
{ 
    Draw circle = new Draw(); 

public void init() 
    { 
Panel mainPanel = new Panel(); 
mainPanel.setLayout(new GridLayout(0,2)); //a left and right panel 

JPanel drawPanel = new JPanel(); //left panel to draw shapes into 
drawPanel.setBackground(Color.BLACK); 
JLabel headerLabel = new JLabel("Draw shapes from another class"); 
headerLabel.setForeground(Color.GREEN); 
drawPanel.add(headerLabel); 

drawPanel.add(circle); 
circle.drawing(); 

JPanel textPanel = new JPanel(); //right panel for text 
TextArea output = new TextArea("Circle and oval"); 
textPanel.add(output); 

mainPanel.add(drawPanel); 
mainPanel.add(textPanel); 
add(mainPanel); 
} 
} 

А класс Черчение

import java.awt.*; 
import java.awt.Graphics; 
import java.awt.Color; 
import javax.swing.*; 

public class Draw extends JPanel 
{ 

    public void drawing() 
    { 
    repaint(); 
    } 

    public void paintComponent(Graphics g) 
{ 
super.paintComponent(g); 
g.setColor(Color.BLUE); 

// a circle (int x, int y, int width, int height,int startAngle, int arcAngle); 

g.fillArc(20,20,50,50,0,360); 

//this will draw a oval of width 60 & height 40 at (10,30) 
g.setColor(Color.RED); 
    g.drawOval(10,30,60,40);   
} 
} 

Заранее спасибо за любые указатели.

+0

Пожалуйста расширить то, что вы имеете в виду под «проблем рисования фигур» - то, что вы ожидаете произойдет, и что происходит? –

+0

Жаль, что вы немного расплывчаты. Левая панель должна содержать заполненный круг и незаполненный овал. В настоящее время я ничего не получаю, как показывает alex2410. – elk266

+0

Я изменил свой ответ. – alex2410

ответ

1

У вас есть проблемы, потому что вы используете компоненты swing и awt вместе. Используйте только компоненты поворота.

Использовать JApplet вместо Applet.

Использовать JPanel вместо Panel.

Использовать JTextArea вместо TextArea.

Также оберните JtextArea с JSrollPane, и, как уже упоминалось, dehlen вам не нужен метод drawing().

Например изменить метод init() как следующий:

public void init() { 
    JPanel mainPanel = new JPanel(); 
    mainPanel.setLayout(new GridLayout(0, 2)); // a left and right panel 

    JPanel drawPanel = new JPanel(new BorderLayout()); 
    drawPanel.setBackground(Color.BLACK); 
    JLabel headerLabel = new JLabel("Draw shapes from another class"); 
    headerLabel.setForeground(Color.GREEN); 
    drawPanel.add(headerLabel,BorderLayout.EAST); 
    circle.setBackground(Color.BLACK); 
    drawPanel.add(circle); 

    JPanel textPanel = new JPanel(new BorderLayout()); // right panel for text 
    JTextArea output = new JTextArea("Circle and oval"); 
    textPanel.add(new JScrollPane(output)); 

    mainPanel.add(drawPanel); 
    mainPanel.add(textPanel); 
    add(mainPanel); 
    setSize(600,200); 
} 

enter image description here

+0

Эй, спасибо за помощь, это прекрасно! Погрузитесь в менеджеров макетов .. arhg. – elk266

+0

Добро пожаловать. Подробнее о [customPaintings] (http://docs.oracle.com/javase/tutorial/uiswing/painting/) и [LayoutManager] (http://docs.oracle.com/javase/tutorial/uiswing/painting/) – alex2410

1

Прежде всего, вы смешиваете компоненты awt и swing. Пожалуйста, введите JTextArea и JPanel и JApplet вместо TextArea, Applet и Panel. Также вы можете сделать что-то вроде этого:

JPanel drawPanel = new Draw(); 

но ваше решение должно работать. Снова я думаю, что ваша проблема возникает из-за смешивания компонентов awt и swing.

Также не требуется circle.drawing();, так как при инициализации панель вызывает paintComponent().