当前位置: 首页 > 面试题库 >

我有一个要更新的条形图,我尝试了revalidate和repaint方法,但没有成功

周正真
2023-03-14
问题内容

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和repaint方法,但没有成功。我什至还添加了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();
    }
}


 类似资料:
  • 泰森已经为贝布莱德世界锦标赛做好了准备。锦标赛以团队为基础,每个团队可以有N名成员。一个玩家只能与一个玩家战斗。G-Revolution团队非常兴奋,因为他们已经进行了大量练习。G-Revolution团队的负责人肯尼创建了一个数据库,在那里他有关于其他团队成员和自己团队成员力量的数据。比赛将在一段时间后开始,肯尼在比赛前搬到自助餐厅吃点心。 G革命团队将在一段时间内战斗,当有人从自助餐厅绑架肯尼

  • 我已经发现了其他类似于我的问题,但找不到解决办法。我有一个带有简单和配置的自定义小部件。问题是: > 将小部件添加到homescreen时,会出现配置活动,但是一旦创建了配置活动,就会立即运行的方法。它应该在按确定按钮关闭配置活动后运行。 即使方法在配置活动启动时运行(根据方法中的Toast显示textview的正确数据),textview仍然没有更新。 即使Android:UpdatePerio

  • 我一直在尝试安装Python 3.5.1的pygame,在Windows 10,64位。到目前为止,我所尝试的一切都导致了某种形式的错误消息。我最近的一次尝试是从http://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame下载pygame-1.9.2a0-cp35-none-win_amd64.whl(也尝试了32位,得到了同样的错误),并将.whl文件拖到p

  • 这是我的方法compute(),它接受月数: 要提供上下文, 余额:是员工每月初获得的固定月薪 我的输入示例如下: 如果比尔·乔布斯(BillJobs)是余额为54K的员工,每年从银行获得0%和1.2%的年利率,计算时间将超过13个月。我的期望输出应该是: 其中706933.71的余额是在调用compute方法时计算出来的,但是我最终得到 13个月后的余额为705852.63。

  • 我提交了一个交易,但没有被开采。 创建和发送交易后,会收到交易hash,但是调用eth_getTransactionReceipt却总是返回空值,指示交易未被挖掘,代码如下: String transactionHash = sendTransaction(...); // you loop through the following expecting to eventually get a

  • 问题内容: 我开发了一个使用GoogleMap的应用程序。我刚刚在Eclipse中更新了Android插件(带有Android L库),并重新导入了GooglePlayService库等。 因此,我重新编译后,在手机(4.4.2中的Sony Xperia Z),GenyMotion Emulator(4.4.2),Nexus 7(4.4.2)上都可以正常工作。但是,它不能在两个Samsung Ga