我正在开发一个简单的拖放式Java GUI构建器。它到目前为止工作,但我拖放的小部件只是我正在画布上动态绘制的矩形。
如果我有一个表示像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);
}
答案 0 :(得分:1)
基本上,您可以将组件绘制到图像上,然后将图像绘制到任何您想要的位置。在这种情况下,可以直接调用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);
}
}