我有一个条形图,我想更新,我尝试了revalidate和重绘方法,但没有成功

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(); } } 

我有一个条形图,我想更新,我尝试了revalidate和重绘方法,但没有成功。 我甚至添加了chartPanel.addMouseListener(this)。 我不知道我哪里出错或者我应该在哪里添加一些东西。 我故意将mouseListener添加到Jbutton,因为在我的原始程序中,我使用JButton中的值来调用图形中的更改。

你的方法适合时尚。 更好的解决方案是更新图表的模型gData ,并让图表自行更新。 也,

  • 不要在JButton上使用鼠标监听器; 只需处理ActionEvent

  • 使用Java命名约定。

  • JOptionPane可以有多个输入字段,如下所示。

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(); } }