gpt4 book ai didi

java - 如何获取 Swing 小部件的图像?

转载 作者:行者123 更新时间:2023-12-01 05:11:35 25 4
gpt4 key购买 nike

Possible Duplicate:
Java Swing : Obtain Image of JFrame

我正在开发一个小型拖放式 Java GUI 构建器。到目前为止它可以工作,但是我拖放的小部件只是我在 Canvas 上动态绘制的矩形。

如果我有一个代表像 JButton 这样的小部件的矩形,有没有办法创建一个 JButton,设置大小并获取该 JButton 的图像(如果它是在屏幕上绘制的)?然后我可以将图像绘制到屏幕上,而不仅仅是无聊的矩形。

例如,我目前正在这样做来绘制一个(红色)矩形:

public void paint(Graphics graphics) {
int x = 100;
int y = 100;
int height = 100;
int width = 150;

graphics.setColor(Color.red);
graphics.drawRect(x, y, height, width);
}

我怎样才能做这样的事情:

public void paint(Graphics graphics) {
int x = 100;
int y = 100;
int height = 100;
int width = 150;

JButton btn = new JButton();
btn.setLabel("btn1");
btn.setHeight(height); // or minHeight, or maxHeight, or preferredHeight, or whatever; swing is tricky ;)
btn.setWidth(width);
Image image = // get the image of what the button will look like on screen at size of 'height' and 'width'

drawImage(image, x, y, imageObserver);
}

最佳答案

基本上,您将把组件绘制到图像上,然后将该图像绘制到您想要的任何位置。在这种情况下,可以直接调用paint,因为您不是在屏幕上绘画(而是在内存位置)。

如果您想比我在这里所做的更多地优化您的代码,您可以保存图像,并在移动时在不同的位置重新绘制它(而不是每次屏幕重新绘制时从按钮计算图像) .

import java.awt.*;
import java.awt.image.BufferedImage;

import javax.swing.*;

public class MainPanel extends Box{

public MainPanel(){
super(BoxLayout.Y_AXIS);
}

@Override
public void paintComponent(Graphics g){
super.paintComponent(g);

// Create image to paint button to
BufferedImage buttonImage = new BufferedImage(100, 150, BufferedImage.TYPE_INT_ARGB);
final Graphics g2d = buttonImage.getGraphics();

// Create button and paint it to your image
JButton button = new JButton("Click Me");
button.setSize(button.getPreferredSize());
button.paint(g2d);

// Draw image in desired location
g.drawImage(buttonImage, 100, 100, null);
}

public static void main(String[] args){
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new MainPanel());
frame.pack();
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

关于java - 如何获取 Swing 小部件的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11970929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com