java-将JInternalFrame带到前面
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-将JInternalFrame带到前面,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3096字,纯文字阅读大概需要5分钟。
内容图文
我有一个JDesktopPane,其中包含许多JInternalFrames.我希望能够将任何JInternalFrame带到前面,并覆盖所有其他活动框架.我发现有许多代码示例可以执行此操作,但是似乎都无法正常工作-该框架没有在其他活动JInternalFrames之上.例如.
public static void moveToFront(final JInternalFrame fr) { if (fr != null) { processOnSwingEventThread(new Runnable() { public void run() { fr.moveToFront(); fr.setVisible(true); try { fr.setSelected(true); if (fr.isIcon()) { fr.setIcon(false); } fr.setSelected(true); } catch (PropertyVetoException ex) { ex.printStackTrace(); } fr.requestFocus(); fr.toFront(); } }); } }
解决方法:
根据API,toFront或moveToFront应该可以工作(尽管从我对API的阅读中可以看出,toFront看起来是两者中更好的).这些JInternalFrames是否坐在JDesktopPane中?根据您的帖子,看起来好像是.我想知道错误是否在其他地方.
考虑创建并发布一个SSCCE(请单击链接),它是一个可编译的,可运行的小型程序,它展示了您为解决这一问题的最佳尝试.然后,我们可以检查您的代码,对其进行运行,对其进行修改,并最好地帮助您对其进行修复.
这是我的SSCCE示例:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.util.Random;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class InternalFrameToFront extends JPanel {
private static final int FRAME_MAX = 21;
private static final int DT_WIDTH = 700;
private static final int DT_HEIGHT = 500;
private static final Dimension DESKTOP_SIZE = new Dimension(DT_WIDTH, DT_HEIGHT);
private static final int IF_WIDTH = 150;
private static final int IF_HEIGHT = 100;
private static final Dimension INT_FRAME_SIZE = new Dimension(IF_WIDTH, IF_HEIGHT);
private Random random = new Random();
private JInternalFrame[] internalFrames = new JInternalFrame[FRAME_MAX];
public InternalFrameToFront() {
JDesktopPane desktop = new JDesktopPane();
desktop.setPreferredSize(DESKTOP_SIZE);
for (int i = 0; i < internalFrames.length; i++) {
JInternalFrame intFrame = new JInternalFrame("Frame Number " + i);
intFrame.setSize(INT_FRAME_SIZE);
int x = random.nextInt(DT_WIDTH - IF_WIDTH);
int y = random.nextInt(DT_HEIGHT - IF_HEIGHT);
intFrame.setLocation(x, y);
intFrame.setVisible(true);
desktop.add(intFrame);
internalFrames[i] = intFrame;
}
JSlider slider = new JSlider(0, FRAME_MAX - 1, 0);
slider.setMajorTickSpacing(5);
slider.setMinorTickSpacing(1);
slider.setPaintLabels(true);
slider.setPaintTicks(true);
JPanel sliderPanel = new JPanel();
sliderPanel.add(slider);
slider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent ce) {
JSlider slider = (JSlider) ce.getSource();
if (!slider.getValueIsAdjusting()) {
int value = slider.getValue();
internalFrames[value].toFront();
}
}
});
setLayout(new BorderLayout());
add(desktop, BorderLayout.CENTER);
add(sliderPanel, BorderLayout.SOUTH);
}
private static void createAndShowUI() {
JFrame frame = new JFrame("InternalFrameToFront");
frame.getContentPane().add(new InternalFrameToFront());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}
内容总结
以上是互联网集市为您收集整理的java-将JInternalFrame带到前面全部内容,希望文章能够帮你解决java-将JInternalFrame带到前面所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。