나는 아래의 링크에서 막대 차트를 만들기위한 소스 코드를 가지고 - 스윙 프로그램을 MVC 형식으로 변환하는 방법은 무엇입니까?
나는 항목과 해당 값을 저장하는 모델 클래스를했다. 그런 다음 모델을 가져 와서 막 대형 차트로 표시해야하는 패널 클래스를 만들었습니다. 그런 다음 패널을 내용 창에 추가하는 프레임 클래스를 만들었습니다. 그런 다음, 링크에서 주어진 코드와 똑같이 모든 것을 실행해야하는 드라이버 클래스를 만들었습니다.문제는 내 프레임과 막 대형 차트 만 표시된다는 것입니다. 어떻게 해결할 수 있습니까?
나는 너무 큽니다 때문에 의도적으로 내 코드를 포함하지 않았습니다. 하지만, 여기에 넣어야한다고 생각한다면 나에게 말해줘. 당신이 위에 표시된
class SimpleBarChartModel {
private String[] items;
private double[] valuesOfItems;
private String title;
public SimpleBarChartModel(String[] itemList, double[] valueList,
String title) {
String[] items = itemList; // **** here
double[] valuesOfItems = valueList; // **** here
}
은 다음과 같습니다 -
package myArea;
public class SimpleBarChartModel{
private String[] items;
private double[] valuesOfItems;
private String title;
public SimpleBarChartModel(String[] itemList, double[] valueList, String title){
String[] items = itemList;
double[] valuesOfItems = valueList;
}
public String[] getItems(){
return items;
}
public void setItems(String[] items){
this.items = items;
}
public double[] getValuesOfItems(){
return valuesOfItems;
}
public void setValuesOfItems(double[] valuesOfItems){
this.valuesOfItems = valuesOfItems;
}
public String getTitle(){
return title;
}
public void setTitle(String title){
this.title = title;
}
}
package myArea;
import java.awt.*;
import javax.swing.*;
public class SimpleBarChartPanel extends JPanel{
SimpleBarChartModel bChartMdl;
public SimpleBarChartPanel(SimpleBarChartModel bcMdl){
bChartMdl = bcMdl;
}
public void paintComponent(Graphics graphics) {
//Must always be the first line in paintComponent method
super.paintComponent(graphics);
double[] values = bChartMdl.getValuesOfItems();
String[] items = bChartMdl.getItems();
String title = bChartMdl.getTitle();
if (values == null || values.length == 0)
return;
double minValue = 0;
double maxValue = 0;
for (int i = 0; i < values.length; i++) {
if (minValue > values[i]){
minValue = values[i];
}
if (maxValue < values[i]){
maxValue = values[i];
}
}
Dimension dim = getSize();
int clientWidth = dim.width;
int clientHeight = dim.height;
int barWidth = clientWidth/values.length;
Font titleFont = new Font("Book Antiqua", Font.BOLD, 15);
FontMetrics titleFontMetrics = graphics.getFontMetrics(titleFont);
Font labelFont = new Font("Book Antiqua", Font.PLAIN, 10);
FontMetrics labelFontMetrics = graphics.getFontMetrics(labelFont);
int titleWidth = titleFontMetrics.stringWidth(title);
int q = titleFontMetrics.getAscent();
int p = (clientWidth - titleWidth)/2;
graphics.setFont(titleFont);
graphics.drawString(title, p, q);
int top = titleFontMetrics.getHeight();
int bottom = labelFontMetrics.getHeight();
if (maxValue == minValue){
return;
}
double scale = (clientHeight - top - bottom)/(maxValue - minValue);
q = clientHeight - labelFontMetrics.getDescent();
graphics.setFont(labelFont);
for (int j = 0; j < values.length; j++) {
int valueP = j * barWidth + 1;
int valueQ = top;
int height = (int) (values[j] * scale);
if (values[j] >= 0){
valueQ += (int) ((maxValue - values[j]) * scale);
}else{
valueQ += (int) (maxValue * scale);
height = -height;
}
graphics.setColor(Color.blue);
graphics.fillRect(valueP, valueQ, barWidth - 2, height);
graphics.setColor(Color.black);
graphics.drawRect(valueP, valueQ, barWidth - 2, height);
int labelWidth = labelFontMetrics.stringWidth(items[j]);
p = j * barWidth + (barWidth - labelWidth)/2;
graphics.drawString(items[j], p, q);
}
}
}
package myArea;
import javax.swing.*;
public class SimpleBarChartView extends JFrame{
SimpleBarChartPanel bChartPanel;
public SimpleBarChartView(SimpleBarChartPanel bcPanel, int width, int height){
bChartPanel = bcPanel;
this.setSize(width, height);
this.getContentPane().add(bChartPanel);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
package myArea;
public class SimpleBarChartDriver {
public static void main(String[]args){
double[] value= new double[5];
String[] languages = new String[5];
value[0] = 1;
languages[0] = "Visual Basic";
value[1] = 2;
languages[1] = "PHP";
value[2] = 3;
languages[2] = "C++";
value[3] = 4;
languages[3] = "C";
value[4] = 5;
languages[4] = "Java";
SimpleBarChartModel sBModel =
new SimpleBarChartModel(languages,value,"comp languages");
SimpleBarChartPanel sBPanel = new SimpleBarChartPanel(sBModel);
SimpleBarChartView sbView = new SimpleBarChartView(sBPanel, 500, 500);
sbView.setVisible(true);
}
}
UPDATE 난 당신이 클래스에서 변수를 미행하는
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at sun.font.FontDesignMetrics.stringWidth(Unknown Source)
다른 사용자의 득표를 제어 할 수 없습니다. –
* "그런 다음 모델을 가져와 막 대형 차트로 표시하는 패널 클래스를 만들었습니다."* OK. 하지만 왜 패널을 확장하는 것보다는 인스턴스를 사용하는 것이 좋을까요? * "아래 링크에서 막대 그래프를 만들기위한 소스 코드가 있습니다. http : //www.roseindia.noooo ..... 제발 말해주십시오. 투표를하지 마십시오."* 투표를 통해 RoseIndia에서 유래 된 코드를 수정하거나 보도록 요청한 것일 수도 있습니다 (또는 대담한 행동을 지시하는 경우). –
나는 당신이 우리가 문제를 이해할 수 있도록 충분한 정보를 제공하지 않았기 때문에 귀하의 현재 답변이 답변되지 않았다고 우려합니다. 코드를 잘못 작성했다고 말하면서 코드를 볼 수 없습니다. 가장 좋은 방법은 먼저 문제를 격리 한 다음 문제를 해결하지 않고 문제가되는 코드를 제시하는 것입니다. 그렇지 않으면이 질문이 닫힐 것입니다. –