Ich suche nach Hilfe zu einem Java-Programm, das ich schreibe. Ich muss ein einfaches Balkendiagramm anzeigen, das aus Rechtecken besteht, die auf Daten basieren, die in einem Array gespeichert sind, das von einem JList-Auswahlereignis generiert wurde. Im JPanel ist jedoch nichts gezeichnet und ich kann nicht herausfinden, wie ich es beheben kann.Wie zeichne Rechtecke aus einer JList Auswahl
Listenauswahl-Ereignis (als Referenz)
try { BufferedReader in = new BufferedReader((new FileReader("scores.txt"))); String sLine; while ((sLine = in.readLine()) != null) { vecAthlete.addElement(new Stage3_DataFile(sLine)); } String[] saAthlete = new String[vecAthlete.size()]; for (int iI = 0; iI < vecAthlete.size(); iI++) saAthlete[iI] = vecAthlete.get(iI).sName; jList_Athlete.setListData(saAthlete); jList_Athlete.setSelectedIndex(0); // Reading input line by line // Close file in.close(); } catch (IOException e) { System.out.println("ERROR: Could not read text file!"); } jList_Athlete.addListSelectionListener(new javax.swing.event.ListSelectionListener() { public void valueChanged(javax.swing.event.ListSelectionEvent e) { double[][] daRun = new double[2][7]; final double dScoreUsed = 5; double dMinScoreRun1 = 10, dMaxScoreRun1 = 0; double dMinScoreRun2 = 10, dMaxScoreRun2 = 0; double dTotalRun1 = 0, dTotalRun2 = 0; jLabel_Athlete.setText(vecAthlete.get(jList_Athlete.getSelectedIndex()).sName); jLabel_Country.setText(vecAthlete.get(jList_Athlete.getSelectedIndex()).sCountry); jLabel_Run1_Score_1.setText(vecAthlete.get(jList_Athlete.getSelectedIndex()).saTempRun1[0]); jLabel_Run1_Score_2.setText(vecAthlete.get(jList_Athlete.getSelectedIndex()).saTempRun1[1]); jLabel_Run1_Score_3.setText(vecAthlete.get(jList_Athlete.getSelectedIndex()).saTempRun1[2]); jLabel_Run1_Score_4.setText(vecAthlete.get(jList_Athlete.getSelectedIndex()).saTempRun1[3]); jLabel_Run1_Score_5.setText(vecAthlete.get(jList_Athlete.getSelectedIndex()).saTempRun1[4]); jLabel_Run1_Score_6.setText(vecAthlete.get(jList_Athlete.getSelectedIndex()).saTempRun1[5]); jLabel_Run1_Score_7.setText(vecAthlete.get(jList_Athlete.getSelectedIndex()).saTempRun1[6]); jLabel_Run2_Score_1.setText(vecAthlete.get(jList_Athlete.getSelectedIndex()).saTempRun2[0]); jLabel_Run2_Score_2.setText(vecAthlete.get(jList_Athlete.getSelectedIndex()).saTempRun2[1]); jLabel_Run2_Score_3.setText(vecAthlete.get(jList_Athlete.getSelectedIndex()).saTempRun2[2]); jLabel_Run2_Score_4.setText(vecAthlete.get(jList_Athlete.getSelectedIndex()).saTempRun2[3]); jLabel_Run2_Score_5.setText(vecAthlete.get(jList_Athlete.getSelectedIndex()).saTempRun2[4]); jLabel_Run2_Score_6.setText(vecAthlete.get(jList_Athlete.getSelectedIndex()).saTempRun2[5]); jLabel_Run2_Score_7.setText(vecAthlete.get(jList_Athlete.getSelectedIndex()).saTempRun2[6]); daRun[0][0] = Double.parseDouble(jLabel_Run1_Score_1.getText()); daRun[0][1] = Double.parseDouble(jLabel_Run1_Score_2.getText()); daRun[0][2] = Double.parseDouble(jLabel_Run1_Score_3.getText()); daRun[0][3] = Double.parseDouble(jLabel_Run1_Score_4.getText()); daRun[0][4] = Double.parseDouble(jLabel_Run1_Score_5.getText()); daRun[0][5] = Double.parseDouble(jLabel_Run1_Score_6.getText()); daRun[0][6] = Double.parseDouble(jLabel_Run1_Score_7.getText()); daRun[1][0] = Double.parseDouble(jLabel_Run2_Score_1.getText()); daRun[1][1] = Double.parseDouble(jLabel_Run2_Score_2.getText()); daRun[1][2] = Double.parseDouble(jLabel_Run2_Score_3.getText()); daRun[1][3] = Double.parseDouble(jLabel_Run2_Score_4.getText()); daRun[1][4] = Double.parseDouble(jLabel_Run2_Score_5.getText()); daRun[1][5] = Double.parseDouble(jLabel_Run2_Score_6.getText()); daRun[1][6] = Double.parseDouble(jLabel_Run2_Score_7.getText()); for(int i = 0; i < 7; i++) { if(daRun[0][i] <= dMinScoreRun1) { dMinScoreRun1 = daRun[0][i]; } if(daRun[0][i] >= dMaxScoreRun1) { dMaxScoreRun1 = daRun[0][i]; } dTotalRun1 += daRun[0][i]; } dTotalRun1 = (dTotalRun1 - dMinScoreRun1 - dMaxScoreRun1)/dScoreUsed; jLabel_TotalRun1.setText(String.valueOf(dTotalRun1)); jLabel_Run1AddInfo.setText("Min Score: " + (dMinScoreRun1) + ", Max Score: " + (dMaxScoreRun1)); for(int i = 0; i < 7; i++) { if(daRun[1][i] <= dMinScoreRun2) { dMinScoreRun2 = daRun[1][i]; } if(daRun[1][i] >= dMaxScoreRun2) { dMaxScoreRun2 = daRun[1][i]; } dTotalRun2 += daRun[1][i]; } dTotalRun2 = (dTotalRun2 - dMinScoreRun2 - dMaxScoreRun2)/dScoreUsed; jLabel_TotalRun2.setText(String.valueOf(dTotalRun2)); jLabel_Run2AddInfo.setText("Min Score: " + (dMinScoreRun2) + ", Max Score: " + (dMaxScoreRun2)); if(dTotalRun1 >= dTotalRun2) jLabel_FinalScore.setText(String.valueOf(dTotalRun1)); else jLabel_FinalScore.setText(String.valueOf(dTotalRun2)); jPanel_Graph.repaint(); } });
JPanel Definitionen
JPanel jPanel_Graph = new JPanel(); jPanel_Graph.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null)); jPanel_Graph.setBounds(729, 159, 700, 200); frame.getContentPane().add(jPanel_Graph); img = new BufferedImage(jPanel_Graph.getWidth(), jPanel_Graph.getHeight(), BufferedImage.TYPE_INT_RGB); g2dimg = (Graphics2D)img.getGraphics(); // Draw a filled white coloured rectangle on the entire area to clear it. g2dimg.setPaint(Color.WHITE); g2dimg.fill(new Rectangle2D.Double(0, 0, img.getWidth(), img.getHeight()));
JPanel Zeichnung Event
class myJPanel extends JPanel { private Rectangle2D.Double rectangle; public void paintComponent(Graphics g) { super.paintComponent(g); for(int i = 0; i < 7; i++) { dHeight = daRun[0][i]; rectangle = new Rectangle2D.Double(dX, dY, dWidth, dHeight); g2dimg.setPaint(Color.red); g2dimg.draw(rectangle); g2dimg.fill(rectangle); dX += dXIncrement; g2dimg.drawImage(img, 0, 0, null); } } }
Vielen Dank im Voraus!
Ich bin nicht wirklich sicher, wie das sollten alle zusammen genäht werden oder tatsächlich, wenn es wäre, würde es tatsächlich funktionieren. Wie weiß 'jPanel_Graph', was es malen soll? – MadProgrammer
Betrachte, das 'JPanel' (welches auch immer es ist) ist verantwortlich für das Rendern des Modells, dein 'ListSelectionListener' ist verantwortlich für das Erzeugen dieses Modells und übergibt es an das' JPanel', so dass es die Ergebnisse – MadProgrammer
in Ordnung bringen kann Wie kann ich diese Informationen tatsächlich an JPanel weitergeben, um diese Ergebnisse zu rendern? –