/ / Java Applet Wrapper Scale Output - java, swing, applet, обвивка

Изпълнение на скалата за обвиване на ядрото на Java - Java, swing, applet, wrapper

Създавам обвивка за прелюдия на Notch "s"The Chambered "и бих искал да го направя така, че да можете да промените размера на прозореца. Не мога да разбера как бих могъл да направя скалата на съдържанието. Опитах се да замени onPaint. Не мога да променя Jar, за да го направя това.

опит заPaint:

package com.gudenau.pc.poc;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;

public class JScaledFrame extends JFrame {

private static final long serialVersionUID = 4044340683411982494L;

public JScaledFrame(String title) {
super(title);
}

@Override
public void paint(Graphics graphics){
Dimension min = getMinimumSize();
Dimension size = getSize();

BufferedImage image = new BufferedImage(min.width, min.height, BufferedImage.TYPE_4BYTE_ABGR);
Graphics subGraphics = image.getGraphics();
super.paint(subGraphics);
subGraphics.dispose();

graphics.drawImage(image, 0, 0, size.width, size.height, null);
}
}

Отговори:

1 за отговор № 1

Мащабирането на съдържанието е много трудно. Това, което искате да промените е контекста на мащабиране на Graphics контекстно рисуване на основния компонент.

Обикновено това, което бихте направили, е по-важно от това paint метод на нарушаващия компонент и приложете коефициента на мащабиране, който искате ...

public class MyExtendedClass extends ... {
@Override
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D)g.create();
double scaleFactor = 1d;
// Calculate the scaling factor to apply
// based on the "default" size and the
// current size...
g2d.scale(scaleFactor, scaleFactor);
super.paint(g2d);
g2d.dispose();
}
}

Това би могло да въведе всички видове странности и честно казано може да се използва по-стабилно решение JXLayer/JLayer, например...

Можете също да намерите използването на AffineTransform по-лесно...


1 за отговор № 2

Не рисувайте върху контейнер от най-високо ниво, като например JFrame, употреба JComponent или JPanel, Замяна paintComponent() за рисуване, а не paint() и не забравяйте да се обадите super.paintComponent(g).

Направете рисуване вътре paintComponent нищо друго. Избягвайте да влагате допълнителна логика на програмата или ненужни разпределения в този метод. Операциите за боядисване трябва да бъдат бързи и оптимизирани за по-добро изпълнение и потребителско изживяване.

Също така, избягвайте null изображения наблюдатели при повикване drawImage. JPanel например инструменти ImageObserver, за да можете да минете this ако се удължава JPanel.

виждам Извършване на персонализирана живопис за повече информация. Вижте също Живопис в AWT и Swing.


0 за отговор № 3

Тъй като изглежда, че това ще бъде трудно да се направис нормална Java ще прилагам някаква тъмна магия с библиотеките на ASM. Надявах се, че няма да е необходимо да се прави по този начин, но изглежда сякаш мащабиране на платно, заредено от външен буркан, не е възможно.