I have a bar chart which I want to update and I tried the revalidate and repaint methods but with no success

匿名 (未验证) 提交于 2019-12-03 01:06:02

问题:

class GraphGenerator1 extends JPanel {     ChartPanel chartPanel, sbc;      void generator(int t, int Value1, int Value2) {         if (t == 1) {             DefaultCategoryDataset gData = new DefaultCategoryDataset();             gData.setValue(Value1, "What you saved", "");             gData.setValue(Value2, "What you paid", "");              JFreeChart chart = ChartFactory.createBarChart("", "", "", gData,                     PlotOrientation.VERTICAL, false, false, false);             chart.setBackgroundPaint(Color.WHITE);             BarRenderer br = (BarRenderer) chart.getCategoryPlot()                     .getRenderer();             br.setBarPainter(new StandardBarPainter());             br.setSeriesPaint(0, Color.decode("#97d95c"));             br.setSeriesPaint(1, Color.decode("#437346"));             chart.getCategoryPlot().setBackgroundPaint(new Color(0, 0, 0, 0));             br.setMaximumBarWidth(0.25);             chart.getCategoryPlot().setDomainGridlinesVisible(false);             chart.getCategoryPlot().setRangeGridlinesVisible(false);             chart.getCategoryPlot().getDomainAxis().setTickLabelsVisible(false);             // chart.getCategoryPlot().clearDomainMarkers();             chart.getCategoryPlot().getRangeAxis().setAxisLineVisible(false);             chart.getCategoryPlot().getRangeAxis().setTickMarksVisible(false);             chartPanel = new ChartPanel(chart);             this.setLayout(new BorderLayout());             this.add(chartPanel, BorderLayout.CENTER);             this.setOpaque(true);         }     } }  class Window extends JFrame implements MouseListener {     GraphGenerator1 x;     JButton j;      Window() {         x = new GraphGenerator1();         x.generator(1, 56, 20);         j = new JButton("CLICK ME");          this.setLayout(new BorderLayout());         this.add(x, BorderLayout.CENTER);         this.add(j, BorderLayout.SOUTH);          j.addMouseListener(this);          this.setVisible(true);         this.setExtendedState(MAXIMIZED_BOTH);         this.setDefaultCloseOperation(EXIT_ON_CLOSE);     }      public void mouseEntered(MouseEvent e) {     }      public void mouseExited(MouseEvent e) {     }      public void mousePressed(MouseEvent e) {     }      public void mouseReleased(MouseEvent e) {     }      public void mouseClicked(MouseEvent e) {         String a = (String) JOptionPane.showInputDialog(rootPane,                 "ENTER FIRST VALUE", "", JOptionPane.PLAIN_MESSAGE);         String b = (String) JOptionPane.showInputDialog(rootPane,                 "ENTER SECOND VALUE", "", JOptionPane.PLAIN_MESSAGE);          int aa = Integer.parseInt(a);         int bb = Integer.parseInt(b);          x.generator(1, aa, bb);          x.chartPanel.revalidate();         x.chartPanel.repaint();          // I DONT KNOW IT DOESNT UPDATE//      }      public static void main(String args[]) {         new Window();     } } 

I have a bar chart which I want to update and I tried the revalidate and repaint methods but with no success. I have even added chartPanel.addMouseListener(this). I dont know where am I going wrong or where I should be adding something. I have intentionally added mouseListener to Jbutton because in my original program I am using values in a JButton to invoke change in graphs.

回答1:

Your approach works after a fashion. A better solution is to update the chart's model, gData, and let the chart update itself. Also,

  • Don't use a mouse listener on a JButton; just handle the ActionEvent.

  • Use Java naming conventions.

  • A JOptionPane can have multiple inputs fields, as shown here.

SSCCE:

public class GraphFrame extends JFrame {      GraphFrame() {         final GraphPanel gPanel = new GraphPanel();         gPanel.create();         JButton button = new JButton(new AbstractAction("Update") {             @Override             public void actionPerformed(ActionEvent e) {                 String a = JOptionPane.showInputDialog(rootPane,                     "ENTER FIRST VALUE", "", JOptionPane.PLAIN_MESSAGE);                 String b = JOptionPane.showInputDialog(rootPane,                     "ENTER SECOND VALUE", "", JOptionPane.PLAIN_MESSAGE);                 int aa = Integer.parseInt(a);                 int bb = Integer.parseInt(b);                 gPanel.update(aa, bb);             }         });         this.setDefaultCloseOperation(EXIT_ON_CLOSE);         this.add(gPanel, BorderLayout.CENTER);         this.add(button, BorderLayout.SOUTH);         this.pack();         this.setLocationRelativeTo(null);         this.setVisible(true);     }      private static class GraphPanel extends JPanel {          private DefaultCategoryDataset gData = new DefaultCategoryDataset();          void create() {             update(56, 20);             JFreeChart chart = ChartFactory.createBarChart("", "", "", gData,                 PlotOrientation.VERTICAL, false, false, false);             ChartPanel chartPanel = new ChartPanel(chart);             this.add(chartPanel);         }          private void update(int value1, int value2) {             gData.clear();             gData.setValue(value1, "What you saved", "");             gData.setValue(value2, "What you paid", "");         }     }      public static void main(String args[]) {         new GraphFrame();     } } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!