我正在制作游戏,我有一个完美的主菜单.当我选择其中一个选项时,它会在新窗口中显示另一个菜单.但是在这个新窗口中,KeyListener没有响应.如果我单击返回主菜单窗口,KeyListener仍然在那里工作.这是代码:
主菜单:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import java.io.*;
import javax.imageio.*;
public class DisplayMainMenu extends JFrame implements KeyListener{
static int width = 799, height = 463;
int arrowPos = 310;
boolean clear = true;
BufferedImage menu = null;
BufferedImage arrow = null;
LevelSkip test = new LevelSkip();
boolean done = false;
static DisplayMainMenu main;
public static void main(String[] args){
main = new DisplayMainMenu();
main.setResizable(false);
main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
main.setVisible(true);
main.init();
}
public void init() {
try{
menu = ImageIO.read(new File("Main …Run Code Online (Sandbox Code Playgroud) 我在Mac上使用几个JFrame制作了一个程序,分辨率还可以,一切都适合屏幕.但是当我在我的电脑上运行程序时,JFrame太大了,就在屏幕上.
我的问题是:是否可以在JFrame上设置通用分辨率,以便将所有组件绘制得更小?我宁愿这样做,然后通过整个程序并手动调整每个组件的大小.
我有一个简单的GUI程序,可以JTable在某个时间点创建一个新窗口(包含一个).如果用户关闭JTable,主应用程序也会关闭.我该如何防止这种情况?它是否与它如何处理窗口关闭有关,或者我应该给它自己的线程,或者什么?
我正在研究这个程序,使用swing.每次导出程序并运行它时,我都会尝试设置的GUI.JFrame可以,但不是内部组件.提前谢谢〜艾利斯
码:
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
public class Login {
public static void login_Interface(){
//Start GUI style//
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
} catch (InstantiationException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
} catch (UnsupportedLookAndFeelException e1) {
e1.printStackTrace();
}
// End //
JFrame login_Frame = new JFrame("Login - LetsMeet");
login_Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
login_Frame.setSize(750, 650);
login_Frame.setResizable(true);
JPanel panel_Title = new JPanel(); //PANEL Title …Run Code Online (Sandbox Code Playgroud) 我总是想知道如何制作一个包含多个JFrame的程序.我的意思是我只想要一个类来处理所有的GUI和东西,但我怎么能有效地做到这一点?很多教程都说我们通过继承JFrame来制作JFrame.但如果我想要很多帧呢?
例如:带有一些选项的一帧中的应用程序标题菜单是一帧主要工作应用程序是一帧像游戏中一样.
但我不确定我是否与JPanel有关?我对2完全感到困惑.我只想要一个不移动的框架,但基本上框架的内容正在发生变化.例如,当我点击START时,它将变为框架的游戏风格.
我正在为更大的GUI应用程序编写脚本.主应用程序窗口使用系统LookAndFeel,但我希望我的脚本的GUI使用Nimbus LookAndFeel.创建GUI后,我想将其设置LookAndFeel回原始版本.我觉得下面的SSCCE应该可以工作,但我NullPointerException在使用我的Component对象时会得到一个.
import java.awt.Dimension;
import java.awt.GridBagLayout;
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
public class GUI extends JFrame {
private static LookAndFeel originalLookAndFeel = UIManager.getLookAndFeel();
static {
System.out.println("At start, look and feel is " + UIManager.getLookAndFeel().getName());
try {
setNimbusLookAndFeel();
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println("Look and feel changed to " + UIManager.getLookAndFeel().getName()
+ " before component creation");
}
private GridBagLayout gridBag = new GridBagLayout();
private JTabbedPane tabs = new JTabbedPane(); …Run Code Online (Sandbox Code Playgroud) 我有一个带有某种重绘问题的Swing应用程序.当屏幕(JFrame)关闭时,该屏幕上的工件有时会涂在其他屏幕上.它完全不能在我们办公室的100多台开发人员机器上使用,而且大多数用户使用该软件.在过去几年中,关于这个问题的报道很多,但我们总是把它归咎于显卡或驱动程序.尽管如此,在过去几个月中,该问题的报告数量急剧增加,因此我们需要找出真正的原因.
几乎所有客户都在Windows上运行,它影响Windows 7和8机器.我们通常在JRE 1.6.0_29上运行,但问题也发生在1.6.0_45和1.7.0_51.
下图说明了这个问题.我用红色概述了这个工件 - 这是另一个被关闭的JFrame的一部分.当JFrame可见时,它不在屏幕上的那个位置.另请注意,工件正上方的JTable列不符合要求.最后,请注意,工件不是仅绘制在JTable上,而是绘制在其父级JScrollPane和屏幕底部的单独JPanel上.
有人有什么想法会导致这个吗?

如何JFrame 在Java应用程序的不同事件派发线程中访问不同的执行请通过此处提出的SSCCE
在这种情况下,JVM的新实例或反射是否有帮助
最后,正如我所提到的,如果将以下代码添加到第一个类中
Frame[] f2 = JFrame.getFrames();
for(Frame fx: f2){
System.out.println(fx.getTitle());
fx.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){
}
Run Code Online (Sandbox Code Playgroud)
如果在SSCCE中按顺序添加到第二个类,则只返回一个帧,返回两个帧,如果添加到第三个类,则返回所有帧.这是由于事件调度线程导致此行为背后的原因导致的问题.如何从主框架,即MyApp访问所有框架.
为什么JFrame.getFrames(); 返回awt帧说,例如,如果我想更改我的应用程序中所有JFrame的默认关闭操作,gerFrames返回awt帧,如果JFrame中的caset产生异常.
线程"main"中的异常java.lang.ClassCastException:[Ljava.awt.Frame; 无法转换为[Ljavax.swing.JFrame; at myApp.MYApp.main(MYApp.java:48)
我有一个任务来创建一个JInternalFrame可以调用我的applet工作的多个(最后一个分配调用SpherePainter)并且可以计算在其中运行了多少'applet' JinternalFrame.
[小程序在另一个内部运行JInternalFrame]
public class MyInternalFrame extends JInternalFrame {
static int openFrameCount = 0;
static final int xOffset = 30, yOffset = 30;
public MyInternalFrame() {
super("SpherePainter #" + (++openFrameCount),
true,
true,
true,
true);
setSize(500,500);
//Set the window's location.
setLocation(xOffset*openFrameCount, yOffset*openFrameCount);
SpherePainterApplet sp = new SpherePainterApplet ();
sp.init();
this.add(sp);
}
Run Code Online (Sandbox Code Playgroud)
}
我可以毫无问题地调用applet,但我无法计算它们中有多少是"实际"运行的.
我的方法是checkApp++在创建一个applet和checkApp--关闭一个applet 时.有没有办法使用关闭按钮(X)或类似的听众?
我意识到包含一个与窗口中的'x'完全相同的按钮是没有意义的,但是我已经在我的GUI上找到了我的按钮的位置,发现让退出按钮变得更容易了只是一个占位符.我喜欢这种做法.
好吧无论如何继续前进.
我有一个父JFrame(实际上是主类),我希望在程序运行的整个过程中保持运行状态.这不是我的问题.我的问题是打开一个子JFrame.我在主类中实例化它(它添加了我创建的面板组件),我无法弄清楚Panel中的JFrame有多接近.有这么简单的方法吗?我已经将WindowConstant设置为Dispose on Close.
到目前为止我所做的是创建一个方法getExit(),它返回一个布尔值true.然后我在主类中实例化了JFrame,if/else if语句告诉它如果exit为False则设置JFrame可见,如果为true则处理它.什么都不做.我猜这是因为要么根本不打算检查,要么我编码不好.
有什么建议?
编辑:澄清我的代码到目前为止没有发布它(600行废话通过).我有我的主要课程Driver().这是相当直接的主要JFrame'形式'.
所述类有几个按钮来打开一个执行简单功能的新JFrame.我们将命名其中一个类(辅助JFrame只有3个)Panel(int type) 它扩展了JPanel.
我有一个构造函数设置取决于采取int type和隐藏我的面板中的某些组件(试图通过组合类似的功能最大化面板).我在面板上有一个按钮退出按钮.但是因为类本身不是JFrame并且没有实例化,所以我不能在那里处理它.我必须在主类中找到一种方法.
这是我的问题.
java ×10
swing ×10
jframe ×3
applet ×1
artifact ×1
jtable ×1
keylistener ×1
reflection ×1
repaint ×1
resolution ×1