创建一个边距编辑器组件,如Microsoft Word中的那个

时间:2011-09-28 19:50:47

标签: java swing jcomponent jspinner

我有一个Java Swing应用程序,我想在其中创建一个很好的组件,就像Microsoft Word中的组件一样。在Microsoft Word中,您可以更改文档的边距,如下所示: enter image description here

这里的诀窍是,如果你将Top margin改为(让我们说)1.5“那么预览图像会改变以显示这一点,所以线条会在图像中向下移动一点以显示边距的变化所以用户可以感受到此更改会影响他的文档的数量。例如,如果我将左边距更改为(4.0“),图像将如下所示:

enter image description here

我所做的是创建2张图像,一张空白页面图像+另一张只包含线条的图像(线条图像),就像这两幅图像一样:

enter image description here enter image description here

我将每个图像插入到JLabel上面,现在当我更改JSpinner上边距值时,我保持“空白页”图像固定,但我更改了“线图像”的边框以将其向下移动一点点。这个技巧适用于上边距,但如果我更改底部/右/左边距,则行为完全错误。

这是我在更改任何JSpinner值时应用的代码:

private void marginSpinnerStateChanged() {
    //1. Get the approximate values of all margins :
        int topMargin = (int)( Float.valueOf( topSpinner.getValue().toString() ) * 8 );
        int bottomMargin = (int)( Float.valueOf( bottomSpinner.getValue().toString() ) * 8 );
        int leftMargin = (int)( Float.valueOf( leftSpinner.getValue().toString() ) * 8 );
        int rightMargin = (int)( Float.valueOf( rightSpinner.getValue().toString() ) * 8 );

    //2. Apply all specified margins to the lines label : 
        linesLabel.setBorder( new EmptyBorder( topMargin, leftMargin, bottomMargin, rightMargin ) );
}

你能帮我继续这项工作吗?

2 个答案:

答案 0 :(得分:1)

如果您注意到,他们不会移动文本图像。相反,他们只展示了一半。这是简单的图像处理。有关示例,请参阅this

答案 1 :(得分:1)

您可以在纸张上方绘制图像,然后随意缩放图像。因此,您将覆盖JComponent的paintComponent()方法,以执行以下操作:

g.drawImage(image, x, y, width, height, null);

x - 将是左边距
y - 将是最高利润率 width - 将是(maxWidth - leftMargin - rightMargin)
高度 - 将是(maxHeight - topMargin - bottomMargin)

如果您不喜欢缩放图像,您可以始终使用BufferedImage,然后使用getSubImage(...)方法获取要绘制的所需大小的图像。