JAVA组件边界_java – 似乎忽略组件边界的AffineTransform

我有以下内容:

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)而不是组件:

其他所有东西都是相对于面板绘制的,它只是旋转的文本而不是.我究竟做错了什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值