gpt4 book ai didi

java - 如何在 ImageIcon 前面移动 JLabel?

转载 作者:行者123 更新时间:2023-11-29 02:59:27 24 4
gpt4 key购买 nike

我认为代码中的所有内容都已正确编写我只需要知道如何整理不同的层即可。

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.KeyStroke;

class FullSceenToggleAction extends AbstractAction {

private JFrame frame;
private GraphicsDevice fullscreenDevice;

public FullSceenToggleAction(JFrame frame) {
this(frame, GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice());
}

public FullSceenToggleAction(JFrame frame, GraphicsDevice fullscreenDevice) {
this.frame = frame;
this.fullscreenDevice = fullscreenDevice;
}

@Override
public void actionPerformed(ActionEvent e) {
frame.dispose();
if (frame.isUndecorated()) {
fullscreenDevice.setFullScreenWindow(null);
frame.setUndecorated(false);
} else {
frame.setUndecorated(true);
fullscreenDevice.setFullScreenWindow(frame);
}
frame.setVisible(true);
frame.repaint();
}

}

public class Main {

public static final void addKeyBinding(JComponent c, String key, final Action action) {
c.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(key), key);
c.getActionMap().put(key, action);
c.setFocusable(true);
}

public static void main(String[] args) {
final JFrame frame = new JFrame("Fullscreen Toggle Test");
Container contentPane = frame.getContentPane();
contentPane.add(new JLabel("Hey"), BorderLayout.CENTER);
frame.add(new JLabel(new ImageIcon("C:/Users/SamBr/Pictures/DesktopBackgrounds/image.png")));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(960, 600);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setTitle("Virtual World");
addKeyBinding(frame.getRootPane(), "F11", new FullSceenToggleAction(frame));
}

}

当我运行代码时,我看到了图像,但在它前面或屏幕上的任何地方都没有文字“嘿”我不明白为什么它没有显示或者我如何才能让它在图像前面可见。

最佳答案

我在之前告诉过你原因——你在 contentPane 中添加了两个组件,第二个组件取代了第一个。

请注意,这两行代码将组件添加到相同 容器,即 JFrame 的 contentPane:

    contentPane.add(new JLabel("Hey"), BorderLayout.CENTER);
frame.add(new JLabel(
new ImageIcon("C:/Users/SamBr/Pictures/DesktopBackgrounds/image.png")));

因为根据 the JFrame API :

As a convenience, the add, remove, and setLayout methods of this class are overridden, so that they delegate calls to the corresponding methods of the ContentPane.

此外,contentPane 默认使用 BorderLayout,如果您添加组件而不使用第二个参数常量,则组件默认添加到 BorderLayout.CENTER 位置。

如果你想让两者都显示,那么要么

  1. 使用不同于容器默认 BorderLayout 的布局
  2. 保留 BorderLayout,但将两个 JLabel 添加到两个不同的 BorderLayout 位置,例如 BorderLayout.CENTER、BorderLayout.PAGE_START...
  3. 使用 JLayeredPane 来保存图层
  4. 在图像绘制 JPanel 的 paintComponent 方法中绘制图像,并将“嘿”JLabel 添加到此 JPanel
  5. ....其他解决方案。

关于java - 如何在 ImageIcon 前面移动 JLabel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35962483/

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