从右到左(向后)JProgressBar

时间:2010-08-17 18:41:48

标签: java swing

我的应用程序需要显示值为-1到1的图形表示。负值应为一种颜色,正值为另一种颜色。零位于中心,不显示任何内容。 (如果有帮助,这里的具体用途是显示金融应用程序中买卖订单的相对权重。)

我最好为此使用一对JProgressBars,但是Swing控件在左边开始(至少)。标准控件仅支持两个方向,左右或底部。传递负值并没有帮助。我的问题是,实现这种效果的最快方法是什么?

子类化JProgressBar将涉及几乎完全重新实现它。使用JFreeChart条形图似乎是一项相对简单的任务的大量代码(和努力)。我也许可以制作一个小的,方形的JTable并填充它,但这又是很多代码。你会建议什么?

5 个答案:

答案 0 :(得分:3)

嗯,也许这根本不起作用,但如何制作JProgressBar的子类并覆盖paintComponent()这样的事情:

@Override
protected void paintComponent(Graphics g) {
  Graphics2D g2d = (Graphics2D) g;
  g2d.rotate(Math.PI);
  super.paintComponent(g2d);
}

如果我更清醒和清醒,我会测试它。

编辑: 旋转它也可能有效,我发现它更容易扩展然后翻译,如下所示:

@Override
protected void paintComponent(Graphics g) {
  Graphics2D g2d = (Graphics2D) g;
  g2d.scale(-1, 1); //Flips over y-axis
  g2d.translate(-getWidth(), 0); //Moves back to old position.
  super.paintComponent(g2d);
}

答案 1 :(得分:2)

使用JFreeChart或子类化JProgressBar似乎有点矫枉过正,但在paintTrack()中覆盖BasicSliderUI可能会有效。这是一个example

答案 2 :(得分:1)

前几天我看过JFreeChart,你想做什么看起来像是完全矫枉过正。

由于这似乎很容易在程序上绘制,我只是创建一个扩展JComponent的类,覆盖paint方法以在其中绘制rect,并将其添加为自定义小部件。

答案 3 :(得分:0)

交换背景和前景色,回归看起来就像左边的进度。

答案 4 :(得分:0)

以下代码可以完成这项工作:

setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);