2015-10-23 4 views
0

Поскольку я новичок, я не могу опубликовать более двух ссылок, но это x-post из reddit.com/r/learnprogramming, просто для полного раскрытия.Почему на мой JPanel нет ничего привлекательного?

В основном я просто буду вставлять то, что я сказал там, здесь. Спасибо за вашу помощь, если вы можете помочь.

Я пишу несколько графическое приложение. В настоящее время у меня есть возможность графа sin (x), но это не вопрос этого вопроса. Я не могу привлечь мою главную панель. Here - это то, на что он сейчас выглядит.

У меня была переопределенная функция красок в моем классе Window.java, который рисовал функцию sin (x) и оси, но когда я сделал внутренний класс, который расширил JPanel(), он больше не рисовал бы.

Затем я попытался создать отдельный файл, но ничего не нарисовал.

Что может помешать рисованию? Here are all my files in question.

редактировать: код в вопросе:

GraphDraw.java:

//import stuff 
Public class GraphDraw extends JPanel { 
    SinX sinx = new SinX(); 
    GraphPanel p = new GraphPanel(); 

    @Override 
    public void paintComponent(Graphics gc) { 
     super.paintComponent(gc); 

     Graphics2D g = gc; 
     p.paintComponent(g); 
     sinx.paint(g); 
    } 
} 

И в Window.java, я инициализировать GraphDraw и добавить его к моей главной панели, которая находится под кнопками в изображение и над метками x/y min/max.

GraphDraw drawer = new GraphDraw(); 
/* 
    GUI code 
*/ 
mainPanel.add(drawer); 

SinX.java

//import stuff 

public class SinX extends Component { 

    public void paint(Graphics g) { 

     g.setColor(Color.red); 

     for(double x=-400;x<=400;x=x+0.5) { 
      double y = 50 * sin(x*((Math.PI)/180)); 
      int Y = (int)y; 
      int X = (int)x; 
      g.drawLine(400+X,300-Y,400+X,300-Y); 
     } 
    } 
} 
+3

Опубликовать [mcve] ... – Reimeus

+0

То, что он сказал ... дать нам краткие примеры кода в вашем вопросе, а не в какой-то ссылке GitHub. – Jim

+0

@Reimeus исправлено. –

ответ

0

Во-первых, прежде чем что-то еще, сделайте следующее:

  1. Изменение вы возражаете от компонента к JComponent
  2. Не никогда, никогда не называют paintComponent() или paint() на графическом объекте из swing или awt, используйте object.repaint(); (По причинам я не буду вдаваться здесь, потому что он длинный и сложный)

Оттуда я попробую позвонить setVisible(true); на все ваши объекты. Если вы получаете этот код из учебника, остановите его и используйте другой учебник. Вам нужно узнать, как работают swing и AWT-библиотека, прежде чем вы сможете начать создавать пользовательские интерфейсы. Никто больше не использует AWT, потому что Swing намного лучше. По каким причинам, посмотрите на следующую страницу. Если вы слишком ленивы, чтобы сделать это, это потому, что оно более оптимизировано и мощнее.

What is the difference between Swing and AWT?

Смежные вопросы