#java #swing #jframe #paintcomponent #custom-painting
#java #swing #jframe #paintcomponent #пользовательское рисование
Вопрос:
У меня есть аналогичное выделение для тегов html5, текст перемещается горизонтально справа налево, отлично работает без ошибок.
public class texscroll extends JPanel {
private int x = 510, y = 25;
private String string = "Text in moving similary to the tags HTML5 Marquesina (<marquee>).";
public texscroll() {
Font font = new Font("Arial", Font.BOLD Font.PLAIN, 15);
setFont(font);
setForeground(Color.BLACK);
setOpaque(false);
Timer timer = new Timer(14, new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
x -= 1;
if (x == -10 * string.length()) {
x = 510;
}
repaint();
}
});
timer.start();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(720, 480);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g); //To change body of generated methods, choose Tools | Templates.
Graphics2D g2 = (Graphics2D) g;
g2.drawString(string, x, y);
}
}
Но теперь я хотел бы иметь возможность добавлять или комбинировать текст и изображения в движении.
private String string = "Text in moving similary to the tags HTML5 Marquesina (<marquee>).";
Как я могу вызвать изображения (img/img.png)
, чтобы их можно было визуализировать в движении?
Комментарии:
1. Посмотрите 6 вариантов,
drawImage(..)
которыеGraphics
предлагает экземпляр, или любой из вариантов, предлагаемыхGraphics2D
.2. Проверьте панель Marquee . Это позволяет вам прокручивать компоненты, так что этот компонент может быть JLabel с текстом и / или значком.
Ответ №1:
Просто нарисуйте изображение так, как вы рисуете текст :
class Texscroll extends JPanel {
private int x = 510, y = 25;
private final String string = "Text in moving similary to the tags HTML5 Marquesina (<marquee>).";
private final Image image;
public Texscroll() {
Font font = new Font("Arial", Font.BOLD Font.PLAIN, 15);
setFont(font);
setForeground(Color.BLACK);
image = getImage();
Timer timer = new Timer(14, arg0 -> {
x -= 1;
if (x == -10 * string.length()) {
x = 510;
}
repaint();
});
timer.start();
setPreferredSize(new Dimension(720, 480));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.drawString(string, x, y);
g2.drawImage(image, x, y 100, getFocusCycleRootAncestor());
}
//use any image
private BufferedImage getImage() {
int iconWidth =100;
BufferedImage img = new BufferedImage(iconWidth , iconWidth,
BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = img.createGraphics();
g2.setColor(Color.RED);
g2.fillOval(1, 1, iconWidth - 2, iconWidth - 2);
g2.dispose();
return img;
}
}