我的应用程序需要显示值为-1到1的图形表示。负值应为一种颜色,正值为另一种颜色。零位于中心,不显示任何内容。 (如果有帮助,这里的具体用途是显示金融应用程序中买卖订单的相对权重。)
我最好为此使用一对JProgressBars,但是Swing控件在左边开始(至少)。标准控件仅支持两个方向,左右或底部。传递负值并没有帮助。我的问题是,实现这种效果的最快方法是什么?
子类化JProgressBar将涉及几乎完全重新实现它。使用JFreeChart条形图似乎是一项相对简单的任务的大量代码(和努力)。我也许可以制作一个小的,方形的JTable并填充它,但这又是很多代码。你会建议什么?
答案 0 :(得分:3)
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);