2013-04-14 4 views
0

Я успешно построил круговую диаграмму JComponent, которая находится в отдельном классе IAPieChart.java. Логика PieChart находится в статическом внутреннем классе, который расширяет JComponent. Сам JApplet прекрасно строит и отображает «вот я!». чтобы указать, что панели были построены и добавлены с помощью этого кода:JComponent не отображается в JApplet

public class IAPieChartApplet extends JApplet { 

    JPanel controls; 
    JPanel chartPanel; 
    JComponent pieChart; 

    /** 
    * Initialization method that will be called after the Applet is loaded into 
    * the browser. 
    */ 

    public void init() { 

     // Build the Pie Chart Panel 
     buildPieChartPanel(); 

     // Build the controls panel 
     buildControlsPanel(); 

     //Set the Layout 
     setLayout(new FlowLayout()); 

     //getContentPane().add(new PieChart(), controls); 
     //add(chartPanel); 
     //add(controls); 

    } 



    private void buildPieChartPanel(){ 

     // Build the panel JPanel 
     chartPanel = new JPanel(); 
     pieChart = new PieChart(); 
     JLabel label = new JLabel("Here I Am!"); 
     chartPanel.add(pieChart); 
     chartPanel.add(label); 

    } 

    private void buildControlsPanel() { 

     controls = new JPanel(); 
     JLabel here = new JLabel("Here I Am"); 
     controls.add(here); 

    } 

} 

Когда я запускаю этот IAPieChartApplet.java файл, я получаю ярлыки и не PieChart.

Lables and No PieChart

Я установил метод останова здесь и шаг в статический класс PieChart:

private void buildPieChartPanel(){ 

     // Build the panel JPanel 
     chartPanel = new JPanel(); 
     pieChart = new PieChart(); 
     JLabel label = new JLabel("Here I Am!"); 
     chartPanel.add(pieChart); 
     chartPanel.add(label); 

    } 

Debug берет меня так далеко, как здесь, то шаги обратно из класса. Он выполняет все остальную логику в классе PieChart. Это код статического класса PieChart, который снова отлично работает. Отладка приведет меня к массиву IAPieChart, а затем отступит от метода. И это «вероятно», почему оно не отображается.

enter image description here

Это код PieChart Класс:

public static class PieChart extends JComponent { 

     IAPieChart[] pieValue = {new IAPieChart(2, Color.green), 
           new IAPieChart(4, Color.orange), 
           new IAPieChart(4, Color.blue), 
           new IAPieChart(3, Color.red) 

     }; 

     public void paintComponent(Graphics g) { 

      super.paintComponent(g); 
      Graphics2D g2d = (Graphics2D) g; 
      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
        RenderingHints.VALUE_ANTIALIAS_ON); 
      drawPie((Graphics2D) g, getBounds(), pieValue); 

     } 

     void drawPie(Graphics2D g, Rectangle area, IAPieChart[] pieValue){ 

      double sum = 0.0; 
      for (int i = 0; i < pieValue.length; i++) { 

       sum += pieValue[i].arcValue; 
      } 
      // DONT NEED endPoint to make the pieChart (Mishadoff's sample). 
      // needs double endPoint = 0.0D for (phcoding's sample). 
      double endPoint = 0.0D; 
      int arcStart = 0; 
      for (int i = 0; i < pieValue.length; i++){ 

       /////////THIS IS THE OLD STATEMENT//////// 
       //endPoint += (int) (endPoint * 360/sum); 
       arcStart = (int) (endPoint * 360/sum); 

       // this statement makes the pieChart. 
       int radius = (int) (pieValue[i].arcValue * 360/ sum); 
       g.setColor(pieValue[i].color); 
       //g.fillArc(area.x, area.y, area.width, area.height, arcStart , radius); 
       g.fillArc(area.x, area.y, area.width, area.height, arcStart , radius); 

       ///////THIS IS THE OLD STATEMENT//// 
       //arcStart += pieValue[i].arcValue; 
       endPoint += pieValue[i].arcValue; 

       // this statement will make the pieChart. 
       //arcStart += radius; 
      } 

     } 
    } // END PieChart class.* 

Я попытался с помощью getContentPane(), перекрасить(), а все остальное выглядело хорошо в моих поисках, и я просто из вариантов. За последние несколько недель я преуспевал, но это задание урезало меня влево и вправо. Я надеюсь, что вы сможете помочь.

+0

'setEnabled()'? 'SetVisible()'? – ApproachingDarknessFish

+0

ValekHalfHeart: Я попытался, потому что вы потратили время на публикацию, однако они не сработали. Я считаю, что это происходит потому, что статический класс PieChart не читается полностью. Debug говорит, что массив загружен, это просто не рендеринг <- из-за отсутствия правильного слова в Applet. Вот почему я попробовал перерисовать(); У меня есть опыт около 9-10 недель, поэтому я стараюсь использовать все ресурсы, которые я накопил за это время, к сожалению, безрезультатно. Спасибо за ваш интерес и помощь. – 2013-04-14 02:05:30

+1

'Логика PieChart находится в статическом внутреннем класс, который расширяет JComponent' - он не должен быть статическим внутренним классом.Это должен быть открытый класс, который вы создаете напрямую. Затем, как только вы исправите, вам нужно переопределить метод getPreferredSize(), чтобы вернуть значение, чтобы ваш FlowLayout мог выполнять свою работу. – camickr

ответ

2

Круговая диаграмма не отображается PieChart не имеет значения. Поэтому содержащее JPanel, которое использует значение по умолчанию FlowLayout, не отображает его. getPreferredSize следует использовать более setPreferredSize:

@Override 
public Dimension getPreferredSize() { 
    return new Dimension(100, 100); 
} 

Update:

В вашем пересмотренным апплет, вы расширяете старый AWT Applet который не переопределяет paintComponent, используйте JApplet вместо этого.

0

Я переделал программу в меру своих возможностей, используя приведенные рекомендации, и графика все еще не будет отображаться в апплете. После избавления от ошибки создания я получил апплет для успешной сборки, однако круговая диаграмма не появится. Я надеюсь, что кто-то поможет в этом, чтобы я мог перейти к другим функциям с помощью этой программы.

Вот что я сейчас:

package iapiechart; 

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

public class IAPieChart2 extends Applet 
{ 
    double arcValue;  // passes a value for the calculation of the arc. 
    Color color;   // holds value for color (expressed as an integer 
    public IAPieChart2(){}; 
    public IAPieChart2(double value, Color color){ 

     arcValue = value; 
     this.color = color; 
    } 

    public class PieChart extends JComponent { 

     public PieChart(){}; 

     IAPieChart[] pieValue = {new IAPieChart(2, Color.green), 
           new IAPieChart(4, Color.orange), 
           new IAPieChart(4, Color.blue), 
           new IAPieChart(3, Color.red) 

     }; 
     @Override 
    public void paintComponent(Graphics g) { 

      super.paintComponent(g); 
      Graphics2D g2d = (Graphics2D) g; 
      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
        RenderingHints.VALUE_ANTIALIAS_ON); 
      drawPie((Graphics2D) g, getBounds(), pieValue); 

     } 
    void drawPie(Graphics2D g, Rectangle area, IAPieChart[] pieValue){ 

      double sum = 0.0; 
      for (int i = 0; i < pieValue.length; i++) { 

       sum += pieValue[i].arcValue; 
      } 
      // DONT NEED endPoint to make the pieChart (Mishadoff's sample). 
      // needs double endPoint = 0.0D for (phcoding's sample). 
      double endPoint = 0.0D; 
      int arcStart = 0; 
      for (int i = 0; i < pieValue.length; i++){ 

       /////////THIS IS THE OLD STATEMENT//////// 
       //endPoint += (int) (endPoint * 360/sum); 
       arcStart = (int) (endPoint * 360/sum); 

       // this statement makes the pieChart. 
       int radius = (int) (pieValue[i].arcValue * 360/ sum); 
       g.setColor(pieValue[i].color); 
       //g.fillArc(area.x, area.y, area.width, area.height, arcStart , radius); 
       g.fillArc(area.x, area.y, area.width, area.height, arcStart , radius); 

       endPoint += pieValue[i].arcValue; 

      } 
    } 
    } 
    @Override 
    public void init(){ 

     IAPieChart2 iap2 = new IAPieChart2(); 
     PieChart pc = new PieChart(); 
     setPreferredSize(new Dimension(300, 200)); 
     iap2.getPreferredSize(); 
     super.add(pc); 
     setVisible(true); 

    } 

} 

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

  • Нет связанных вопросов^_^