Создайте компонент редактора полей, как в Microsoft Word - PullRequest
1 голос
/ 28 сентября 2011

У меня есть приложение на Java Swing, и я хочу создать в нем красивый компонент, такой как компонент в Microsoft Word. В Microsoft Word вы можете изменить поля вашего документа, как здесь: enter image description here

Хитрость в том, что если вы измените Верхние поля на (скажем, 1,5), тогда изображение предварительного просмотра изменится, чтобы показать это, поэтому линии будут немного смещаться вниз, чтобы показать это изменение полей так пользователь может почувствовать, насколько это изменение повлияет на его документ. Например, если я изменю левое поле на (4,0 "), изображение будет выглядеть так:

enter image description here

Что я сделал, так это создал 2 изображения пустого изображения страницы + другое изображение, содержащее только строки (изображение линий), как эти 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 ]

1 голос
/ 29 сентября 2011

Вы можете просто нарисовать изображение поверх бумаги и масштабировать изображение по мере продвижения.Таким образом, вы должны переопределить метод paintComponent () JComponent, чтобы сделать что-то вроде:

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

x - будет левое поле
y - будет верхнее поле
width - будет(maxWidth - leftMargin - rightMargin)
высота - будет (maxHeight - topMargin - bottomMargin)

Если вам не нравится масштабирование изображения, вы всегда можете использовать BufferedImage, а затем использовать getSubImage (...) метод получения изображения нужного размера для рисования.

1 голос
/ 28 сентября 2011

Если вы заметили, они не сдвигают текстовое изображение. Вместо этого они показывают только половину этого. Это простая манипуляция с изображением. Для хорошего примера см. this .

...