我有以下内容:
public class ParametricEQView extends JPanel implements PluginView { private static final int BAND_WIDTH = 3; private static final int THROW_HEIGHT = 64; private static final int WIDTH = 128*BAND_WIDTH + 2*MARGIN; private static final int HEIGHT = 2*THROW_HEIGHT + 2*MARGIN; private static final int MID_HEIGHT = THROW_HEIGHT + MARGIN; private final ParametricEQ _peq; public ParametricEQView(ParametricEQ peq) { super(); _peq = peq; SwingUtils.freezeSize(this, WIDTH, HEIGHT); setToolTipText("Parametric Equalizer"); } @Override public void paint(Graphics g) { final Graphics2D g2d = (Graphics2D) g; final int max = findMax(); g.setColor(BACKGROUND); g.fillRect(0, 0, WIDTH, HEIGHT); g.setColor(DATA); final double scalingFactor = -((double) THROW_HEIGHT) / max; final double[] fineLevels = _peq.getFineLevels(); int x = MARGIN; int h; final int[] xPoints = new int[128]; final int[] yPoints = new int[128]; for (int i = 0; i < 128; ++i) { h = (int) (fineLevels[i] * scalingFactor); xPoints[i] = x; yPoints[i] = MID_HEIGHT + h; x += BAND_WIDTH; } g.drawPolyline(xPoints, yPoints, 128); g.setColor(AXES); g.drawLine(MARGIN, MARGIN, MARGIN, HEIGHT-MARGIN); g.drawLine(MARGIN, MID_HEIGHT, WIDTH-MARGIN, MID_HEIGHT); g.setFont(AXIS_FONT); final FontMetrics metrics = g.getFontMetrics(); int width = (int) metrics.getStringBounds(AXIS_LABEL_INPUT_MIDINUM, g).getWidth(); g.drawString(AXIS_LABEL_INPUT_MIDINUM, WIDTH-MARGIN-width, HEIGHT-3); final AffineTransform atx = new AffineTransform(); atx.setToRotation(-Math.PI/2, 0, HEIGHT); g2d.setTransform(atx); final String topLabel = "+" + max; width = (int) metrics.getStringBounds(topLabel, g).getWidth(); g2d.drawString(topLabel, HEIGHT-MARGIN-width, HEIGHT+10); width = (int) metrics.getStringBounds(AXIS_LABEL_OUTPUT_VELOCITY, g).getWidth(); g2d.drawString(AXIS_LABEL_OUTPUT_VELOCITY, MID_HEIGHT-(width/2), HEIGHT+10); g2d.drawString("-" + max, MARGIN, HEIGHT+10); } private int findMax() { int max = 3; for (int i = 0; i < 128; ++i) max = Math.max(max, (int) Math.ceil(Math.abs(_peq.getFineLevels()[i]))); return max; } }
这就是它的样子:
的ParametricEQView
是与白色背景填充大部分的窗口的组件.在这个图像中,它的坐标是包含框架中的(0,0),一切都很棒.但是,如果我调整窗口的大小以使其ParametricEQView
移动一点(它具有固定的大小并设置为在其可用空间中居中),则旋转的文本保持相对于框架的(0,0)而不是零件:
其他所有东西都是相对于面板绘制的,它只是旋转的文本而不是.我究竟做错了什么?