Java 单击JButton时如何在JWIndow上显示图像?
我有一个带有帮助按钮的Java 单击JButton时如何在JWIndow上显示图像?,java,jbutton,actionlistener,jwindow,Java,Jbutton,Actionlistener,Jwindow,我有一个带有帮助按钮的JMenuBar。当用户点击“帮助”时,我需要打开一个不同的窗口,显示游戏说明。当用户在窗口外单击时,可以关闭该窗口。我认为我缺少代码,因为它不工作: Window.java public class Window extends JWindow { //java.net.URL imgIntro = getClass().getResource("/images/intro.jpg"); ImageIcon imIntro = new ImageIcon(getC
JMenuBar
。当用户点击“帮助”时,我需要打开一个不同的窗口,显示游戏说明。当用户在窗口外单击时,可以关闭该窗口。我认为我缺少代码,因为它不工作:
Window.java
public class Window extends JWindow
{
//java.net.URL imgIntro = getClass().getResource("/images/intro.jpg");
ImageIcon imIntro = new ImageIcon(getClass().getResource("/images/intro.jpg"));
//java.net.URL imgRegles = getClass().getResource("/images/rules.jpg");
ImageIcon imRules = new ImageIcon(getClass().getResource("/images/rules.jpg"));
static Thread t = new Thread();
static int thread = 0;
static JButton bouton;
static int X;
static int Y;
public Window( int X, int Y, int type) {
super();
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
setSize(X,Y);
setLocation( (dim.width - X)/2 , (dim.height - Y)/2);
setVisible(true);
Container fen = getContentPane();
if (type == 1 ) bouton = new JButton(imIntro);
else bouton = new JButton(imRules);
bouton.setPreferredSize(new Dimension(X, Y) );
fen.add( bouton);
bouton.setVisible( true );
show();
/* if window introduction,
just display for 5 secondes */
if( type == 1 ) {
try {
Thread.sleep(5000);
thread = 1;
}
catch( java.lang.InterruptedException ex ) {
JOptionPane.showMessageDialog(null, "erreur");
}
dispose();
}
/* if window of rules
only close it when user clicks */
else if ( type == 2 ) {
bouton.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
});
}
}
}
Menu.java
public class Menu extends JMenuBar implements ActionListener{
Interface map;
JMenu m5;
public Menu(Interface map){
super();
this.map=map;
m5 = new JMenu ("Help");//dislay instructions / rules
this.add(m5);
public void actionPerformed(ActionEvent evt){
//.../
else if(evt.getSource () == m5){
//new JWindow
Window rules = new Window( 700, 457, 2);
}
}
}
使用MCVE编辑
为什么有一个else-if条件而没有if条件?这将创建一个语法错误 此外,显示窗口的代码应如下所示:
dispose();
Window rules = new Window( 700, 457, 2);
rules.show();
为什么有一个else-if条件而没有if条件?这将创建一个语法错误 此外,显示窗口的代码应如下所示:
dispose();
Window rules = new Window( 700, 457, 2);
rules.show();
我建议您在“说明”窗口中使用
JDialog
,而不是JFrame
。例如,见
public class Test {
JFrame mainFrame = new JFrame();
JDialog instructions = new JDialog(mainFrame);
public Test() {
gui();
}
public void gui() {
instructions.setSize(200, 200);
JMenuBar mb = new JMenuBar();
JMenu help = new JMenu("Help");
mb.add(help);
JMenuItem instructionsMenu = new JMenuItem("Instructions");
help.add(instructionsMenu);
instructionsMenu.addActionListener(e -> instructions.setVisible(true));
mainFrame.setJMenuBar(mb);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setSize(600, 400);
mainFrame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new Test());
}
}
注意事项:
- 调用
,这是对窗口执行的最后一项操作setVisible
- 在实际程序中,如果windows中有组件,请调用它们的
,而不是设置它们的大小pack()
JDialog
,而不是JFrame
。例如,见
public class Test {
JFrame mainFrame = new JFrame();
JDialog instructions = new JDialog(mainFrame);
public Test() {
gui();
}
public void gui() {
instructions.setSize(200, 200);
JMenuBar mb = new JMenuBar();
JMenu help = new JMenu("Help");
mb.add(help);
JMenuItem instructionsMenu = new JMenuItem("Instructions");
help.add(instructionsMenu);
instructionsMenu.addActionListener(e -> instructions.setVisible(true));
mainFrame.setJMenuBar(mb);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setSize(600, 400);
mainFrame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new Test());
}
}
注意事项:
- 调用
,这是对窗口执行的最后一项操作setVisible
- 在实际程序中,如果windows中有组件,请调用它们的
,而不是设置它们的大小pack()
.show()
,但我想我现在就不使用了。请让运营部只显示与问题相关的重要代码。我深表歉意。我一直使用.show()
,但我想我现在就不使用了。发布一个。请确保将您的代码复制粘贴到新项目中,并确保在将其发布到此处之前它已编译并运行。请正确缩进代码。@user1803551:发布MCVE会很困难。。。我只是想在用户点击“帮助”时显示一个带有游戏说明图像的新窗口,这一点都不难。所有这些菜单都与这个问题无关。使用main
创建一个类,该类显示一个带有按钮的窗口,当按下按钮时,将显示带有图像的新窗口。应不超过30行。然后我们就可以看到什么不起作用了。@user1803551:我编辑了我的帖子。。。我正在上课。。同时,请注意,问题在于,当用户单击“帮助”按钮时,没有显示带有图像的新窗口。如果没有actionEvent
,就不会发生任何事情。它只是一个扁平的按钮,什么也不做。我猜我缺少代码。您想为菜单按钮而不是窗口设置ActionListener
。在将框架设置为可见之前,您还需要准备框架。发布一个。请确保将您的代码复制粘贴到新项目中,并确保在将其发布到此处之前它已编译并运行。请正确缩进代码。@user1803551:发布MCVE会很困难。。。我只是想在用户点击“帮助”时显示一个带有游戏说明图像的新窗口,这一点都不难。所有这些菜单都与这个问题无关。使用main
创建一个类,该类显示一个带有按钮的窗口,当按下按钮时,将显示带有图像的新窗口。应不超过30行。然后我们就可以看到什么不起作用了。@user1803551:我编辑了我的帖子。。。我正在上课。。同时,请注意,问题在于,当用户单击“帮助”按钮时,没有显示带有图像的新窗口。如果没有actionEvent
,就不会发生任何事情。它只是一个扁平的按钮,什么也不做。我猜我缺少代码。您想为菜单按钮而不是窗口设置ActionListener
。在将框架设置为可见之前,还需要准备框架。