```java

/*

* LWUIT + ChartComponent,实现多种图表

* 本例实现的是“饼图”

*/

package com.sun.lwuit.uidemo;

import com.sun.lwuit.Button;

import com.sun.lwuit.Command;

import com.sun.lwuit.Font;

import com.sun.lwuit.Form;

import com.sun.lwuit.Image;

import com.sun.lwuit.Label;

import com.sun.lwuit.events.ActionEvent;

import com.sun.lwuit.events.ActionListener;

import com.sun.lwuit.layouts.FlowLayout;

import org.beanizer.j2me.charts.ChartItem;

import org.beanizer.j2me.charts.PieChart;

public class PieChartDemo implements ActionListener {

public Form form = new Form("VBarChartDemo");

private Command backCommand = new Command("Back", 1);

final PieChart pieChart = new PieChart("");

PieChartDemo() {

//饼图说明

String chart_str[] = {"█ A:你好吗", "█ B:早上好", "█ C:中午好", "█ D:晚上好", "█ E:吃宵夜", "█ F:睡懒觉"};

//饼图颜色

int[][] color = {{0, 0, 200}, {0, 200, 0}, {50, 15, 30}, {100, 0, 200}, {0, 200, 100}, {200, 100, 200}};

//饼图范围

int[] percent = {15, 10, 5, 20, 34, 16};

//绘制柱体的说明

}

}

```

重构后的代码如下:

```java

private void initChartInfo(String[] chart_str, int[][] color) {

for (int i = 0; i < chart_str.length; i++) { // 循环

Label chart_info = new Label(chart_str[i]);

chart_info.getStyle().setFgColor(UIDemoMIDlet.RGBtoInt(color[i][0], color[i][1], color[i][2]));

form.addComponent(chart_info);

}

}

private Image drawPieChart(ChartItem item, int width, int height, String imagefile, int[][] color, int[] percent) {

item.setFont(Font.FACE_PROPORTIONAL, Font.STYLE_PLAIN, Font.SIZE_SMALL);

item.setDrawAxis(true);

return pieChart.createImage(width, height);

}

// 在initChartInfo方法中创建按钮并添加到表单中

private void initChartInfoWithButton(String[] chart_str, int[][] color) {

int width = form.getWidth();

int height = form.getHeight() - 60;

Image img_hbarChart = drawPieChart(pieChart, width, height, "", color, percent); // 绘制柱体图

Button button = new Button(img_hbarChart);

button.getStyle().setBgTransparency(1); // 透明背景,会非常消耗资源,速度减慢,注意使用

button.setBorderPainted(false);

form.addComponent(button);

form.addCommand(backCommand);

form.setCommandListener(this);

form.setLayout(new FlowLayout()); // 必须使用这种排列,FlowLayout最适合

}

```

这段代码主要用于设置饼图的大小、添加阴影特效、设置颜色等属性。以下是重构后的代码:

```java

// 设置chart控件的大小,饼图必须width=height

item.setPreferredSize(width - 80, width - 80);

// 需要使用背景时,读取背景图并设置到chart控件上

if (imagefile.length() > 0) {

try {

javax.microedition.lcdui.Image img = javax.microedition.lcdui.Image.createImage(imagefile);

item.setBackgroundImage(img);

} catch (Exception ex) {

ex.printStackTrace();

}

}

// 使用阴影特效

item.showShadow(true);

item.setShadowColor(20, 20, 20);

item.setColor(40, 40, 200);

item.resetData();

for (int i = 0; i < color.length; i++) { // 循环绘画柱体

item.addElement(String.valueOf((char) ('a' + i)), percent[i], color[i][0], color[i][1], color[i][2]);

}

item.setMaxValue(100); // 柱体代表数值的显示范围,100%

// 这个是lcdui的Image

javax.microedition.lcdui.Image lcdui_img = javax.microedition.lcdui.Image.createImage(width, height); //饼图大小,图像>控件

// 这个是lcdui的Graphics

javax.microedition.lcdui.Graphics lcdui_g = lcdui_img.getGraphics();

// 将pieChart绘制到lcdui_g上,并设置位置和大小

pieChart.drawPie(lcdui_g, 40, 40, width - 100, width - 100); // 这里设置的大小必须比width,height小,才能完全显示

// 将lcdui_img转换为lwuit Image并返回

return UIDemoMIDlet.lcdui2lwuit(lcdui_img);

```

这段代码是一个事件处理器,当某个动作事件发生时,它会被调用。在这个例子中,当动作事件的命令是`backCommand`时,它会调用`UIDemoMIDlet.backToMainMenu()`方法,将用户导航回主菜单。

以下是重构后的代码:

```java

public void actionPerformed(ActionEvent arg0) {

if (arg0.getCommand() == backCommand) {

UIDemoMIDlet.backToMainMenu();

}

}

```

重构后的代码使用了更简洁的代码结构,将条件判断和调用的方法分开,使得代码更加易读和易于维护。