gpt4 book ai didi

java - JComponent 没有出现在 JApplet 中

转载 作者:行者123 更新时间:2023-12-02 07:06:48 26 4
gpt4 key购买 nike

我已经成功构建了一个 JComponent 饼图,它位于它自己的单独类 IAPieChart.java 中。 PieChart 逻辑位于扩展 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);

}

调试将我带到这里,然后退出类。它确实逐步执行 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()、repaint() 以及其他在我的搜索中看起来不错的方法,但我没有其他选择。过去几周我的表现一直很好,但这项任务却让我左右为难。我希望你能帮忙。

最佳答案

饼图不会出现,因为 PieChart 没有任何首选大小。因此,使用默认 FlowLayout 的包含 JPanel 不会显示它。 getPreferredSize 应该使用 setPreferredSize:

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

更新:

在修改后的小程序中,您正在扩展旧的 AWT Applet,它不会覆盖 paintComponent,而是使用 JApplet

关于java - JComponent 没有出现在 JApplet 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15994887/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com