- •Задание на дипломный проект
- •Приложение к заданию на дипломный проект
- •5.1 Функции, реализуемые системой:
- •5.2 Технические требования к системе:
- •Введение
- •1 Системотехническая часть
- •Постановка задачи
- •1.1.1 Методика «Якоря карьеры»
- •1.1.2 Тест Потемкиной
- •1.1.3 Тест Леонгарда
- •1.1.4 Методика дс
- •1.1.5 Тест Лири
- •1.1.6 Методика смил
- •1.1.7 Тест Айзенка
- •1.1.8 Методика Кеттелла
- •1.1.9 Тест Амтхауэра
- •1.1.10 Тест на оперативную зрительную память
- •1.1.11 Таблицы Шульте
- •1.1.12 ТестHand
- •1.2 Анализ предметной области
- •1.3 Анализ существующих программных продуктов
- •1.4 Разработка логического проекта системы
- •1.4.1 Краткие сведения о методологии uml
- •1.4.2 Диаграмма вариантов использования
- •1.4.3 Сценарии
- •1.4.4 Диаграммы классов
- •1.4.5 Диаграмма состояний
- •1.4.6 Диаграмма последовательности
- •1.5 Разработка логической модели данных системы
- •1.6 Расчет требуемых ресурсов для реализации системы
- •1.6.1 Расчет объема взу
- •1.6.2 Расчет объема озу
- •1.6.3 Оценка времени реакции системы
- •1.6.4 Выбор комплекса технических средств
- •2 Конструкторско-технологическая часть
- •2.1 Выбор программных средств реализации
- •2.1.1 Выбор и обоснование среды разработки и языка программирования
- •2.1.2 Выбор операционной системы
- •2.2 Разработка программного обеспечения системы
- •2.2.1 Разработка интерфейса пользователя
- •2.2.2 Описание основных алгоритмов функционирования системы
- •2.2.3 Разработка подсистемы хранения данных
- •2.3 Контрольный пример работы системы
- •3 Экономическое обоснование разработки
- •3.1 Планирование и организация процесса разработки системы
- •3.2 Расчет затрат на разработку системы
- •3.3 Расчет-прогноз минимальной цены разработки системы
- •3.4 Расчет целесообразного объема продаж и оценка безубыточности
- •3.5 Расчет единовременных затрат на внедрение системы
- •3.6 Расчет текущих затрат на функционирование системы
- •3.7 Оценка экономической эффективности разработки
- •4 Безопасность жизнедеятельности
- •4.1 Обеспечение безопасности автоматизированной системы анализа психологического состояния личности по результатам тестирования
- •4.2 Обеспечение безопасности пользователя
- •4.2.1 Интеллектуальные нагрузки
- •4.2.2 Сенсорные нагрузки
- •4.2.3 Эмоциональные нагрузки
- •4.2.4 Монотонность нагрузок
- •4.3 Общая оценка напряженности трудового процесса
- •Заключение
- •Список использованных источников
- •Приложение а Информация по тестам
- •Приложение б
- •Руководство разработчика а.В.00001-01 33 01-1-лу Листов 16
- •Приложение в Листинг основных модулей
- •Приложение г Акт внедрения
Приложение в Листинг основных модулей
В.1 Класс BatteryController
public class BatteryController
{
private List<Integer> testIds = new LinkedList<Integer>();
private int currentTestId = -1;
private TesteeMain testeeMain;
private Timer timer = null;
private int numberRepetsOZP = -1;
private boolean testShulte = false;
private boolean batteryEnd = false;
private Answers answersOZP = null;
public Answers getAnswersOZP() {
return answersOZP;
}
public void setAnswersOZP(Answers answersOZP) {
this.answersOZP = answersOZP;
}
public BatteryController(Battery battery,TesteeMain testeeMain)
{
this.testeeMain = testeeMain;
testIds.clear();
numberRepetsOZP = -1;
testShulte = false;
batteryEnd = false;
for (BatteryElement element : battery.getBatteryElements())
{
if (element.isTestEnabled())
{
if (element.getTestId()==11)
{
numberRepetsOZP = 0;
}else
{
if (element.getTestId()==12)
{
testShulte = true;
}else
{
testIds.add(element.getTestId());
}
}
}
}
currentTestId = 0;
}
public void startBattery()
{
batteryEnd = false;
if (!testIds.isEmpty())
{
if (testShulte)
{
testeeMain.beginTest(12);
}
if (numberRepetsOZP==0)
{
numberRepetsOZP++;
testeeMain.beginTest(11);
}
testeeMain.beginTest(testIds.get(currentTestId));
}
}
public boolean testEnds()
{
currentTestId++;
if (currentTestId < testIds.size())
{
testeeMain.beginTest(testIds.get(currentTestId));
return false;
}else
{
endBattery();
return true;
}
}
private void endBattery()
{
if (timer!=null) timer.stop();
batteryEnd = true;
if (testShulte)
{
testeeMain.beginTest(12);
}
if (numberRepetsOZP >= 0)
{
numberRepetsOZP++;
testeeMain.beginTest(11);
}
}
private void startTimer(int millis)
{
if(millis > 0)
{
System.out.println("бат timer sarts");
timer = new Timer(millis, new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
actionTimer();
}});
timer.setRepeats(false);
timer.start();
System.out.println("Timer start: seconds: "+(millis/1000)+new Date());
}
}
private void actionTimer()
{
numberRepetsOZP++;
testeeMain.beginTest(11);
}
public void OZPTestEnds()
{
if (numberRepetsOZP<4 && !batteryEnd)
{
switch(numberRepetsOZP)
{
case 1: {startTimer(5*60000); break;}
case 2: {startTimer(10*60000);break;}
case 3: {startTimer(53*60000);break;}
}
}else
{
if (batteryEnd)
{
double avg = 0;
for (Result result : answersOZP.getResults())
{
avg += Integer.parseInt(result.getValue());
}
avg = avg / answersOZP.getResults().size();
answersOZP.getAnswers().add(new Answer(1, ""+Math.round(avg*100D)/100D));
}
}
}
public boolean shouldShowWordsForOZP()
{
return (numberRepetsOZP<=1);
}
public int getNumberRepeatsOZP()
{
return numberRepetsOZP;
}
}
В.2 Класс CalculatorResultsForAizenk
public class CalculatorResultsForAizenk
{
private Map<Integer,Map<Integer,List<Integer>>> key = new HashMap<Integer, Map<Integer, List<Integer>>>();
private void initKey(){
//?
Map<Integer,List<Integer>> critKey = new HashMap<Integer, List<Integer>>();
critKey.put(1, Arrays.asList(1, 3, 8, 10, 13, 17, 22, 25, 27, 39, 44, 46, 49, 53, 56));
critKey.put(2, Arrays.asList(5, 15, 20, 29, 32, 34, 37, 41, 51));
key.put(1, critKey);
//L
critKey = new HashMap<Integer, List<Integer>>();
critKey.put(1, Arrays.asList(2, 4, 7, 9, 11, 14, 16, 19, 21, 24, 26, 28, 31, 33, 35, 38, 40, 43,45, 47, 50, 52, 55, 57));
critKey.put(2, new LinkedList<Integer>());
key.put(2, critKey);
//F
critKey = new HashMap<Integer, List<Integer>>();
critKey.put(1, Arrays.asList(6, 23, 36));
critKey.put(2, Arrays.asList(12, 18, 30, 42, 48, 54));
key.put(3, critKey);
}
public void calculate(Test currentTest,Answers currentAnswers)
{
initKey();
int k = -1;
for (Type type : currentTest.getTypes())
{
int resultValue = 0;
for (Answer answer : currentAnswers.getAnswers())
{
List<Integer> questionIds = key.get(type.getTypeId()).get(answer.getVariant_id());
if (questionIds.contains(answer.getQuestion_id()))
{
resultValue++;
}
}
currentAnswers.getResults().add(new Result(type.getTypeId(), ""+resultValue));
В.3 Класс GraphForAizenk
public class GraphForAizenk extends javax.swing.JFrame implements Printable
{
private static String[] scaleNames = {"1","2","3","4","5"};
Answers answers =null;
/** Creates new form GraphForDS */
public GraphForAizenk(Answers answers) {
this.answers = answers;
initComponents();
Toolkit kit = Toolkit.getDefaultToolkit();
setLocation((kit.getScreenSize().width /2) - (getWidth() / 2), (kit.getScreenSize().height / 2) - (getHeight()/2));
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
setTitle("График результатов теста Айзенка"); // NOI18N
setIconImage(ProfessiogramApp.getIcon());
setMinimumSize(new java.awt.Dimension(200, 200));
setName("Form"); // NOI18N
jPanel1.setBackground(new java.awt.Color(255, 255, 255));
jPanel1.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true));
jPanel1.setName("jPanel1"); // NOI18N
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 551, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 414, Short.MAX_VALUE)
);
jButton1.setFont(new java.awt.Font("Tahoma", 0, 14));
jButton1.setText("Распечатать"); // NOI18N
jButton1.setName("jButton1"); // NOI18N
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton1))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton1)
.addContainerGap())
);
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(this);
boolean ok = job.printDialog();
if (ok) {
try {
job.print();
} catch (PrinterException ex) {
/* The job did not successfully complete */
}
}
}
@Override
public void paint(Graphics r)
{
super.paint(r);
Graphics g = jPanel1.getGraphics();
performPaintGraph(g,jPanel1.getWidth(),jPanel1.getHeight());
}
private Map<Integer,Integer> getMapResults(List<Result> results)
{
Map<Integer,Integer> res = new HashMap<Integer, Integer>();
for (Result result : results)
{
Integer resInte = Integer.valueOf(result.getValue());
res.put(result.getType_id(), resInte);
}
return res;
}
public int print(Graphics g, PageFormat pf, int page) throws PrinterException
{
if (page > 0) { /* We have only one page, and 'page' is zero-based */
return NO_SUCH_PAGE;
}
/* User (0,0) is typically outside the imageable area, so we must
* translate by the X and Y values in the PageFormat to avoid clipping
*/
Graphics2D g2d = (Graphics2D)g;
g2d.translate(pf.getImageableX(), pf.getImageableY());
double aspektRatio = ((double)jPanel1.getWidth())/((double)jPanel1.getHeight());
if (pf.getImageableHeight()*aspektRatio > pf.getImageableWidth())
{
performPaintGraph(g2d,pf.getImageableWidth(),pf.getImageableWidth()/aspektRatio);
}else
{
performPaintGraph(g2d,pf.getImageableHeight()*aspektRatio,pf.getImageableHeight());
}
/* Now we perform our rendering */
/* tell the caller that this page is part of the printed document */
return PAGE_EXISTS;
}
private void performPaintGraph(Graphics g, double widthArea,double heightArea)
{
Graphics2D g2 = (Graphics2D)g;
Map<RenderingHints.Key, Object> rem = new HashMap<RenderingHints.Key, Object>();
rem.put(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
rem.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
RenderingHints rh = new RenderingHints(rem);
g2.setRenderingHints(rh);
int footer = 40;
int left = 55;
int maxY = (int) Math.round(heightArea-footer);
int maxX = (int) Math.round(widthArea-left);
int maximum = 25;
Double stepX = (double) maxX / maximum;
Double stepY = (double)(maxY)/ maximum;
g2.setFont(new Font("Bookman Old Style", Font.PLAIN, 14));
g2.setStroke(new BasicStroke(2,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));
g2.drawLine(left, 0, left, maxY);
g2.drawLine(left, maxY, (int) Math.round(widthArea), maxY);
//Отрисовка подписей и сетки
for (int i = 1; i < maximum; i++)
{
g2.setColor(Color.lightGray);
if (i%2==0)
{
g2.drawLine(left, maxY - (int) Math.round(i*stepY), (int) Math.round(widthArea), maxY - (int) Math.round(i*stepY));
g2.drawLine(left+(int) Math.round(i*stepX), 0, left+(int) Math.round(i*stepX), maxY);
g2.setColor(Color.black);
g2.drawString(""+i, 30, (int) (maxY-(i-0.5)*stepY));
g2.drawString(""+i, (int) Math.round(left+((i-0.2)*stepX)), (int) Math.round(heightArea)-footer/2-5);
}
}
g2.drawLine(left-3, maxY - (int) Math.round(12*stepY), (int) Math.round(widthArea), maxY - (int) Math.round(12*stepY));
g2.drawLine(left+(int) Math.round(12*stepX), 0, left+(int) Math.round(12*stepX), maxY+3);
//Отрисовка названий
AffineTransform saveXform = g2.getTransform();
AffineTransform at = new AffineTransform();
at.translate(20, (maxY/2D)+70);
at.rotate(Math.toRadians(270));
g2.transform(at);
g2.drawString("Шкала нейротизма", 0, 0);
g2.setTransform(saveXform);
g2.drawString("Шкала экстраверсии", (int) Math.round(left+(maxX/2D)-70), (int) Math.round(heightArea)-footer/2+10);
g2.setColor(Color.white);
g2.fillRect(left+10, 10, 90, 10);
g2.fillRect(left+maxX-90, 10, 60, 10);
g2.fillRect(left+10, maxY-20, 80, 10);
g2.fillRect(left+maxX-90, maxY-20, 80, 10);
g2.setColor(Color.black);
g2.drawString("Меланхолик", left+10, 20);
g2.drawString("Холерик", left+maxX-90, 20);
g2.drawString("Флегматик", left+10, maxY-10);
g2.drawString("Сангвиник", left+maxX-90, maxY-10);
Map<Integer,Integer> res = getMapResults(answers.getResults());
//Отрисовка результата
g2.setColor(Color.red);
g2.setStroke(new BasicStroke(5,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));
g2.drawLine((int) Math.round(left+((res.get(1)-0.75)*stepX)),
(int) Math.round(maxY-(res.get(2))*stepY),
(int) Math.round(left+((res.get(1)+0.75)*stepX)),
(int) Math.round(maxY-(res.get(2))*stepY));
g2.drawLine((int) Math.round(left+((res.get(1))*stepX)),
(int) Math.round(maxY-(res.get(2)-0.75)*stepY),
(int) Math.round(left+((res.get(1))*stepX)),
(int) Math.round(maxY-(res.get(2)+0.75)*stepY));
В.4 Класс CalculatorResultsForDS
public class CalculatorResultsForDS
{
public static Set<Integer> inverted = new HashSet<Integer>(Arrays.asList(3,17,38,50));
public static Set<Integer> duplicated = new HashSet<Integer>(Arrays.asList(17,50,8,35));
public static List<Double> avgMale = new LinkedList<Double>(Arrays.asList(36.82,21.78,20.34,21.06,22.04,23.04,31.38,20.02));
public static List<Double> sigmMale = new LinkedList<Double>(Arrays.asList(7.52,5.97,7.81,7.15,8.71,8.7,8.88,5.89));
public static List<Double> avgFemale = new LinkedList<Double>(Arrays.asList(33.37,24.5,25.14,24.27,26.14,27.22,34.97,21.3));
public static List<Double> sigmFemale = new LinkedList<Double>(Arrays.asList(8.38,7.18,9.28,8.4,10.10,9.42,9.62,6.16));
public void calculate(Test currentTest,Answers currentAnswers, String sex)
{
for (Type type : currentTest.getTypes())
{
int resultValue = 0;
LinkedList<Integer> questionIds = currentTest.getQuestionsIdsByTypeId(type.getTypeId());
for (Answer answer : currentAnswers.getAnswers())
{
if (questionIds.contains(answer.getQuestion_id()))
{
if (type.getTypeId() == 2 && inverted.contains(answer.getQuestion_id()))
{
resultValue+=8-answer.getVariant_id();
}else
{
resultValue+=answer.getVariant_id();
}
}
}
if (type.getTypeId() == 2)
{
resultValue += currentAnswers.getAnswerByQuestionId(8).getVariant_id();
resultValue += 8 - currentAnswers.getAnswerByQuestionId(17).getVariant_id();
resultValue += 8 - currentAnswers.getAnswerByQuestionId(50).getVariant_id();
}
if (type.getTypeId() == 5)
{
resultValue += currentAnswers.getAnswerByQuestionId(35).getVariant_id();
}
Double avg;
Double sigm;
if ("M".equals(sex))
{
avg = avgMale.get(type.getTypeId()-1);
sigm = sigmMale.get(type.getTypeId()-1);
}else
{
avg = avgFemale.get(type.getTypeId()-1);
sigm = sigmFemale.get(type.getTypeId()-1);
}
if (type.getTypeId() == 1)
{
resultValue = (int) Math.round(50 + ((10*(resultValue-avg))/sigm));
}else
{
resultValue = (int) Math.round(50 - ((10*(resultValue-avg))/sigm));
}
currentAnswers.getResults().add(new Result(type.getTypeId(), ""+resultValue));
}
}
}
В.5 Класс GraphForDS
public class GraphForDS extends javax.swing.JFrame implements Printable
{
private static String[] scaleNames = {"Ак","Бо","То","Ра","Сп","Ус","Уд","По"};
Answers answers =null;
/** Creates new form GraphForDS */
public GraphForDS(Answers answers) {
this.answers = answers;
initComponents();
Toolkit kit = Toolkit.getDefaultToolkit();
setLocation((kit.getScreenSize().width /2) - (getWidth() / 2), (kit.getScreenSize().height / 2) - (getHeight()/2));
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
setTitle("График результатов теста ДС"); // NOI18N
setIconImage(ProfessiogramApp.getIcon());
setMinimumSize(new java.awt.Dimension(200, 200));
setName("Form"); // NOI18N
jPanel1.setBackground(new java.awt.Color(255, 255, 255));
jPanel1.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true));
jPanel1.setName("jPanel1"); // NOI18N
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 459, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 329, Short.MAX_VALUE)
);
jButton1.setFont(new java.awt.Font("Tahoma", 0, 14));
jButton1.setText("Распечатать"); // NOI18N
jButton1.setName("jButton1"); // NOI18N
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton1))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton1)
.addContainerGap())
);
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(this);
boolean ok = job.printDialog();
if (ok) {
try {
job.print();
} catch (PrinterException ex) {
/* The job did not successfully complete */
}
}
}
@Override
public void paint(Graphics r)
{
super.paint(r);
Graphics g = jPanel1.getGraphics();
performPaintGraph(g,jPanel1.getWidth(),jPanel1.getHeight());
}
private Map<Integer,Integer> getMapResults(List<Result> results)
{
Map<Integer,Integer> res = new HashMap<Integer, Integer>();
for (Result result : results)
{
res.put(result.getType_id(), Integer.parseInt(result.getValue()));
}
return res;
}
public int print(Graphics g, PageFormat pf, int page) throws PrinterException
{
if (page > 0) { /* We have only one page, and 'page' is zero-based */
return NO_SUCH_PAGE;
}
/* User (0,0) is typically outside the imageable area, so we must
* translate by the X and Y values in the PageFormat to avoid clipping
*/
Graphics2D g2d = (Graphics2D)g;
g2d.translate(pf.getImageableX(), pf.getImageableY());
double aspektRatio = ((double)jPanel1.getWidth())/((double)jPanel1.getHeight());
if (pf.getImageableHeight()*aspektRatio > pf.getImageableWidth())
{
performPaintGraph(g2d,pf.getImageableWidth(),pf.getImageableWidth()/aspektRatio);
}else
{
performPaintGraph(g2d,pf.getImageableHeight()*aspektRatio,pf.getImageableHeight());
}
/* Now we perform our rendering */
/* tell the caller that this page is part of the printed document */
return PAGE_EXISTS;
}
private void performPaintGraph(Graphics g, double widthArea,double heightArea)
{
Graphics2D g2 = (Graphics2D)g;
Map<RenderingHints.Key, Object> rem = new HashMap<RenderingHints.Key, Object>();
rem.put(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
rem.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
RenderingHints rh = new RenderingHints(rem);
g2.setRenderingHints(rh);
g2.setStroke(new BasicStroke(2,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));
int footer = 25;
int left = 25;
int maxY = (int) Math.round(heightArea-footer);
int maxX = (int) Math.round(widthArea-left);
Double stepX = (double) maxX / 8D;
Double stepY = (double)(maxY)/70D;
g2.drawLine(left, 0, left, maxY);
g2.drawLine(left, maxY, (int) Math.round(widthArea), maxY);
g2.setColor(Color.gray);
for (int i = 1; i < 70; i++)
{
g2.drawLine(left, (int) Math.round(i*stepY*10), (int) Math.round(widthArea), (int) Math.round(i*stepY*10));
}
g2.setColor(Color.black);
g2.setFont(new Font("Tahoma", Font.PLAIN, 12));
for (int i = 0; i < 70; i++) {
g2.drawString(""+i*10, 10, (int) (maxY-i*stepY*10));
}
for (int i = 0; i < scaleNames.length; i++)
{
g2.drawString(scaleNames[i], (int) Math.round(left+((i+0.5)*stepX)), (int) Math.round(heightArea)-footer/2);
g2.drawLine((int) Math.round(left+((i+1)*stepX)), maxY-3, (int) Math.round(left+((i+1)*stepX)), maxY+3);
}
Map<Integer,Integer> res = getMapResults(answers.getResults());
int prev = -1;
for (int i = 1; i <= scaleNames.length; i++)
{
g2.fillOval((int) Math.round(left+((i-0.5)*stepX))-3,
(int) Math.round(maxY-res.get(i)*stepY)-3, 6, 6);
g2.drawString(""+res.get(i), (int) Math.round(left+((i-0.5)*stepX))-4,
(int) Math.round(maxY-res.get(i)*stepY)-10);
if (prev!=-1)
{
g2.drawLine((int) Math.round(left+((i-1.5)*stepX)),
(int) Math.round(maxY-prev*stepY),
(int) Math.round(left+((i-0.5)*stepX)),
(int) Math.round(maxY-res.get(i)*stepY));
}
prev = res.get(i);
}
}
