Я успешно построил круговую диаграмму 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.
Я установил метод останова здесь и шаг в статический класс 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, а затем отступит от метода. И это «вероятно», почему оно не отображается.
Это код 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(), перекрасить(), а все остальное выглядело хорошо в моих поисках, и я просто из вариантов. За последние несколько недель я преуспевал, но это задание урезало меня влево и вправо. Я надеюсь, что вы сможете помочь.
'setEnabled()'? 'SetVisible()'? – ApproachingDarknessFish
ValekHalfHeart: Я попытался, потому что вы потратили время на публикацию, однако они не сработали. Я считаю, что это происходит потому, что статический класс PieChart не читается полностью. Debug говорит, что массив загружен, это просто не рендеринг <- из-за отсутствия правильного слова в Applet. Вот почему я попробовал перерисовать(); У меня есть опыт около 9-10 недель, поэтому я стараюсь использовать все ресурсы, которые я накопил за это время, к сожалению, безрезультатно. Спасибо за ваш интерес и помощь. – 2013-04-14 02:05:30
'Логика PieChart находится в статическом внутреннем класс, который расширяет JComponent' - он не должен быть статическим внутренним классом.Это должен быть открытый класс, который вы создаете напрямую. Затем, как только вы исправите, вам нужно переопределить метод getPreferredSize(), чтобы вернуть значение, чтобы ваш FlowLayout мог выполнять свою работу. – camickr