【发布时间】:2021-10-05 10:32:41
【问题描述】:
对于我目前正在制作的简单 GUI,我想要一个类似的设计。
蓝色和绿色区域应该只是文本和数字。
红色区域应该是图像。目前,我正在创建图像的缩放实例,从中创建一个 ImageIcon,然后将其添加到标签以使图像适合不同的空间。
问题是,没有宽度我无法创建图片的缩放实例。
我当前的 GridBagLayout 代码如下所示:
private static void createAndShowUI()
{
JFrame frame = new JFrame();
JLabel map = new javax.swing.JLabel();
JLabel data = new javax.swing.JLabel();
JLabel menu = new javax.swing.JLabel();
GridBagConstraints c;
frame = new JFrame("Risiko");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.getContentPane().setLayout(new GridBagLayout());
map.setText("MAP");
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.weightx = 0.75;
c.weighty = 0.75;
frame.getContentPane().add(map, c);
data.setText("DATA");
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 1;
c.weighty = 0.25;
frame.getContentPane().add(data, c);
menu.setText("MENU");
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 0;
c.gridheight = 2;
c.weightx = 0.25;
frame.getContentPane().add(menu, c);
frame.setVisible(true);
}
我创建了三个区域,现在我想创建一个与红色区域的宽度和高度完全相同的图像。
所以我的问题是,如何获得红色区域的宽度和高度,以便创建图片的缩放实例,使其适合该区域?
【问题讨论】:
-
您可以尝试使用Stretch Icon。它将自动调整大小以填充可用空间。您需要“填充” GridBagConstraint 的属性以确保标签填充可用空间。或者另一种选择是创建一个 JPanel 并对图像进行自定义绘制。您可以使用 Graphics.drawImage(...) 方法来动态调整图像大小。
-
@camickr 好的,所以我想将您的方法与 Graphics.drawImage() 一起使用。我知道如何使用它以及它是如何工作的。现在的问题是 JPanel.getGraphics() 返回 null 因为它尚未初始化。我对摇摆相当陌生,以前从未使用过线程。我了解具有初始线程和事件调度线程的模型,但我不知道如何等到一切都初始化后再使用 JPanel 中的 Graphics.drawImage() 函数。你能帮我解决这个问题吗?
-
“我不知道如何才能等到一切都初始化” 等到调用 repaint,然后在覆盖的
paintComponent(Graphics)方法中绘制图像..永远不要在组件上调用getGraphics()。这不是自定义绘画的完成方式。
标签: java image swing gridbaglayout resizable