Java 两个不同程序之间的事件处理

Java 两个不同程序之间的事件处理,java,swing,Java,Swing,我有两个不同的程序MenuWindow.java和SettingsWindow.java 两个GUI都是使用Swing制作的。 是否可以通过单击菜单Windows.java中的按钮打开设置Swindow.java 以下是两个代码: MenuWindow.java SettingsWindow.java 有人能详细解释一下吗?我对Java非常陌生。将设置窗口对象的引用传递到菜单窗口。并在MenuWindow类中单击按钮操作时使用setVisible方法 更新-1: 将ActionListener添

我有两个不同的程序
MenuWindow.java
SettingsWindow.java
两个GUI都是使用Swing制作的。 是否可以通过单击
菜单Windows.java
中的按钮打开
设置Swindow.java

以下是两个代码:

MenuWindow.java SettingsWindow.java
有人能详细解释一下吗?我对Java非常陌生。

设置窗口
对象的引用传递到
菜单窗口
。并在MenuWindow类中单击按钮操作时使用
setVisible
方法

更新-1:

将ActionListener添加到jb1(我假设这是调用SettingsWindow的按钮),并在单击按钮时调用
SettingWindow

 jb1.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent arg0) {
        new SettingWindow();
    }
});
同时从
设置窗口
类中删除
main
。这不是必需的

更新-2:

在此代码中,您添加了一个按钮,如以下代码:

ImageIcon SettingsIc = new ImageIcon("settings.png");
jb1 = new JButton(SettingsIc);
jb1.setFocusPainted(false);
jb1.setContentAreaFilled(false);
jb1.addActionListener(new ActionListener() {

  @Override
  public void actionPerformed(ActionEvent arg0) {
     new SettingWindow();
  }
 });

因此,您添加了一个按钮。单击按钮时,应调用操作。将
ActionListener
写入此按钮,使其弹出相应的窗口。类似地,创建不同的窗口,并通过将
ActionListener
写入上述所有按钮来调用它们。另请阅读

设置窗口
对象的引用传递到
菜单窗口
。并在MenuWindow类中单击按钮操作时使用
setVisible
方法

更新-1:

将ActionListener添加到jb1(我假设这是调用SettingsWindow的按钮),并在单击按钮时调用
SettingWindow

 jb1.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent arg0) {
        new SettingWindow();
    }
});
同时从
设置窗口
类中删除
main
。这不是必需的

更新-2:

在此代码中,您添加了一个按钮,如以下代码:

ImageIcon SettingsIc = new ImageIcon("settings.png");
jb1 = new JButton(SettingsIc);
jb1.setFocusPainted(false);
jb1.setContentAreaFilled(false);
jb1.addActionListener(new ActionListener() {

  @Override
  public void actionPerformed(ActionEvent arg0) {
     new SettingWindow();
  }
 });

因此,您添加了一个按钮。单击按钮时,应调用操作。将
ActionListener
写入此按钮,使其弹出相应的窗口。类似地,创建不同的窗口,并通过将
ActionListener
写入上述所有按钮来调用它们。还可以阅读
设置窗口中的类构造函数,添加
mnuwindow=new MenuWindow(此)。
在
MenuWindow
类构造函数中,添加
frame.setVisible(false)
mouseClicked(MouseEvent me)
add
mnuwindow.getframe().setVisible(true)中
设置窗口
的类构造函数中,添加
mnuwindow=new MenuWindow(此)。
在
MenuWindow
类构造函数中,添加
frame.setVisible(false)。
在
mouseClicked(MouseEvent me)
add
mnuwindow.getframe().setVisible(true)中

请参见

对于第二个“子”窗口,请使用模态
JDialog
JOptionPane

package menuwindow;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class MenuWindow {

    JFrame f;
    JMenuBar m;
    JMenu File, Settings, Timer, Programs, Store, Run, Help;
    JMenuItem m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12;
    JButton jb1, jb2, jb3, jb4, jb5, jb6;

    public MenuWindow() {

        f = new JFrame("Reflow");
        f.setSize(600, 600);
        m = new JMenuBar();
        File = new JMenu("File");
        Settings = new JMenu("Settings");
        Timer = new JMenu("Timer");
        Programs = new JMenu("Programs");
        Store = new JMenu("Store");
        Run = new JMenu("Run");
        Help = new JMenu("Help");
        m1 = new JMenuItem("Exit");
        m2 = new JMenuItem("Temperature");
        m3 = new JMenuItem("Clock");
        m4 = new JMenuItem("Profile");
        m5 = new JMenuItem(" Weekly Timer");
        m6 = new JMenuItem("Preset Programs");
        m7 = new JMenuItem("Errors");
        m8 = new JMenuItem("Profile");
        m9 = new JMenuItem("Auto Run");
        m10 = new JMenuItem("Profile Run");
        m11 = new JMenuItem("Manual Run");
        m12 = new JMenuItem("About");


        Icon SettingsIc = UIManager.getIcon("OptionPane.questionIcon");
                //new ImageIcon("settings.png");
        ActionListener al = new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
                new SettingsWindow(f);
            }
        };
        jb1 = new JButton(SettingsIc);
        jb1.addActionListener(al);
        jb1.setFocusPainted(false);
        //jb1.setBorderPainted(false); 
        jb1.setContentAreaFilled(false);

        ImageIcon TimerIc = new ImageIcon("clock.png");
        jb2 = new JButton(TimerIc);
        jb2.setFocusPainted(false);
        //jb2.setBorderPainted(false); 
        jb2.setContentAreaFilled(false);

        ImageIcon ProgramsIc = new ImageIcon("programs.png");
        jb3 = new JButton(ProgramsIc);
        jb3.setFocusPainted(false);
        //jb3.setBorderPainted(false); 
        jb3.setContentAreaFilled(false);

        ImageIcon StoreIc = new ImageIcon("store.png");
        jb4 = new JButton(StoreIc);
        jb4.setFocusPainted(false);
        //jb4.setBorderPainted(false); 
        jb4.setContentAreaFilled(false);

        ImageIcon RunIc = new ImageIcon("run.png");
        jb5 = new JButton(RunIc);
        jb5.setFocusPainted(false);
        //jb5.setBorderPainted(false); 
        jb5.setContentAreaFilled(false);

        ImageIcon ConnectIc = new ImageIcon("connect.png");
        jb6 = new JButton(ConnectIc);
        jb6.setFocusPainted(false);
        //jb6.setBorderPainted(false); 
        jb6.setContentAreaFilled(false);

        File.add(m1);
        Settings.add(m2);
        Settings.add(m3);
        Settings.add(m4);
        Timer.add(m5);
        Programs.add(m6);
        Store.add(m7);
        Store.add(m8);
        Run.add(m9);
        Run.add(m10);
        Run.add(m11);
        Help.add(m12);
        m.add(File);
        m.add(Settings);
        m.add(Timer);
        m.add(Programs);
        m.add(Store);
        m.add(Run);
        m.add(Help);
        f.add(m);
        f.add(jb1);
        f.add(jb2);
        f.add(jb3);
        f.add(jb4);
        f.add(jb5);
        f.add(jb6);

        jb1.setToolTipText("Settings");
        jb2.setToolTipText("Weekly Timer");
        jb3.setToolTipText("Program List");
        jb4.setToolTipText("Store");
        jb5.setToolTipText("Run");
        jb6.setToolTipText("Connect");

        System.out.println(System.getProperty("user.dir"));

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setJMenuBar(m);
        f.setLayout(new FlowLayout());
        f.setVisible(true);

    }

    public static void main(String[] arg) {
        MenuWindow w = new MenuWindow();

    }
}

class SettingsWindow {

    JFrame f;
    JButton b1, b2, b3;

    public SettingsWindow(Container c) {
        JPanel f = new JPanel(new FlowLayout());
        //f.setSize(400, 400);

        Icon TempuratureIc = UIManager.getIcon("OptionPane.warningIcon");
        b1 = new JButton(TempuratureIc);
        b1.setFocusPainted(false);
        //b1.setBorderPainted(false);
        b1.setContentAreaFilled(false);

        Icon TimeIc = UIManager.getIcon("OptionPane.errorIcon");
        b2 = new JButton(TimeIc);
        b2.setFocusPainted(false);
        //b2.setBorderPainted(false);
        b2.setContentAreaFilled(false);

        Icon ProfileIc = UIManager.getIcon("OptionPane.informationIcon");
        b3 = new JButton(ProfileIc);
        b3.setFocusPainted(false);
        //b3.setBorderPainted(false);
        b3.setContentAreaFilled(false);

        f.add(b1);
        f.add(b2);
        f.add(b3);

        b1.setToolTipText("Temperature Settings");
        b2.setToolTipText("Time Settings");
        b3.setToolTipText("Profile Settings");

        System.out.println(System.getProperty("user.dir"));

        //f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //f.setLayout();
        //f.setVisible(true);

        JOptionPane.showMessageDialog(c, f, "Settings", JOptionPane.QUESTION_MESSAGE);
    }
}

对于第二个“子”窗口,请使用模态
JDialog
JOptionPane

package menuwindow;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class MenuWindow {

    JFrame f;
    JMenuBar m;
    JMenu File, Settings, Timer, Programs, Store, Run, Help;
    JMenuItem m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12;
    JButton jb1, jb2, jb3, jb4, jb5, jb6;

    public MenuWindow() {

        f = new JFrame("Reflow");
        f.setSize(600, 600);
        m = new JMenuBar();
        File = new JMenu("File");
        Settings = new JMenu("Settings");
        Timer = new JMenu("Timer");
        Programs = new JMenu("Programs");
        Store = new JMenu("Store");
        Run = new JMenu("Run");
        Help = new JMenu("Help");
        m1 = new JMenuItem("Exit");
        m2 = new JMenuItem("Temperature");
        m3 = new JMenuItem("Clock");
        m4 = new JMenuItem("Profile");
        m5 = new JMenuItem(" Weekly Timer");
        m6 = new JMenuItem("Preset Programs");
        m7 = new JMenuItem("Errors");
        m8 = new JMenuItem("Profile");
        m9 = new JMenuItem("Auto Run");
        m10 = new JMenuItem("Profile Run");
        m11 = new JMenuItem("Manual Run");
        m12 = new JMenuItem("About");


        Icon SettingsIc = UIManager.getIcon("OptionPane.questionIcon");
                //new ImageIcon("settings.png");
        ActionListener al = new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
                new SettingsWindow(f);
            }
        };
        jb1 = new JButton(SettingsIc);
        jb1.addActionListener(al);
        jb1.setFocusPainted(false);
        //jb1.setBorderPainted(false); 
        jb1.setContentAreaFilled(false);

        ImageIcon TimerIc = new ImageIcon("clock.png");
        jb2 = new JButton(TimerIc);
        jb2.setFocusPainted(false);
        //jb2.setBorderPainted(false); 
        jb2.setContentAreaFilled(false);

        ImageIcon ProgramsIc = new ImageIcon("programs.png");
        jb3 = new JButton(ProgramsIc);
        jb3.setFocusPainted(false);
        //jb3.setBorderPainted(false); 
        jb3.setContentAreaFilled(false);

        ImageIcon StoreIc = new ImageIcon("store.png");
        jb4 = new JButton(StoreIc);
        jb4.setFocusPainted(false);
        //jb4.setBorderPainted(false); 
        jb4.setContentAreaFilled(false);

        ImageIcon RunIc = new ImageIcon("run.png");
        jb5 = new JButton(RunIc);
        jb5.setFocusPainted(false);
        //jb5.setBorderPainted(false); 
        jb5.setContentAreaFilled(false);

        ImageIcon ConnectIc = new ImageIcon("connect.png");
        jb6 = new JButton(ConnectIc);
        jb6.setFocusPainted(false);
        //jb6.setBorderPainted(false); 
        jb6.setContentAreaFilled(false);

        File.add(m1);
        Settings.add(m2);
        Settings.add(m3);
        Settings.add(m4);
        Timer.add(m5);
        Programs.add(m6);
        Store.add(m7);
        Store.add(m8);
        Run.add(m9);
        Run.add(m10);
        Run.add(m11);
        Help.add(m12);
        m.add(File);
        m.add(Settings);
        m.add(Timer);
        m.add(Programs);
        m.add(Store);
        m.add(Run);
        m.add(Help);
        f.add(m);
        f.add(jb1);
        f.add(jb2);
        f.add(jb3);
        f.add(jb4);
        f.add(jb5);
        f.add(jb6);

        jb1.setToolTipText("Settings");
        jb2.setToolTipText("Weekly Timer");
        jb3.setToolTipText("Program List");
        jb4.setToolTipText("Store");
        jb5.setToolTipText("Run");
        jb6.setToolTipText("Connect");

        System.out.println(System.getProperty("user.dir"));

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setJMenuBar(m);
        f.setLayout(new FlowLayout());
        f.setVisible(true);

    }

    public static void main(String[] arg) {
        MenuWindow w = new MenuWindow();

    }
}

class SettingsWindow {

    JFrame f;
    JButton b1, b2, b3;

    public SettingsWindow(Container c) {
        JPanel f = new JPanel(new FlowLayout());
        //f.setSize(400, 400);

        Icon TempuratureIc = UIManager.getIcon("OptionPane.warningIcon");
        b1 = new JButton(TempuratureIc);
        b1.setFocusPainted(false);
        //b1.setBorderPainted(false);
        b1.setContentAreaFilled(false);

        Icon TimeIc = UIManager.getIcon("OptionPane.errorIcon");
        b2 = new JButton(TimeIc);
        b2.setFocusPainted(false);
        //b2.setBorderPainted(false);
        b2.setContentAreaFilled(false);

        Icon ProfileIc = UIManager.getIcon("OptionPane.informationIcon");
        b3 = new JButton(ProfileIc);
        b3.setFocusPainted(false);
        //b3.setBorderPainted(false);
        b3.setContentAreaFilled(false);

        f.add(b1);
        f.add(b2);
        f.add(b3);

        b1.setToolTipText("Temperature Settings");
        b2.setToolTipText("Time Settings");
        b3.setToolTipText("Profile Settings");

        System.out.println(System.getProperty("user.dir"));

        //f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //f.setLayout();
        //f.setVisible(true);

        JOptionPane.showMessageDialog(c, f, "Settings", JOptionPane.QUESTION_MESSAGE);
    }
}


是的,它是(假设两个类都显示不同的窗口)。这里有一个解释如何完成这项任务的例子。@Luiggi Mendoza谢谢!!是的,它是(假设两个类都显示不同的窗口)。这里有一个解释如何完成这项任务的例子。@Luiggi Mendoza谢谢!!你能告诉我更多你不明白的是什么吗?请看我的更新。请随意提问。但在提问之前,请看一看关于秋千的教程。你能告诉我更多你不了解的内容吗?请看我的更新。请随意提问。但在提问之前,请看一看关于Swigs的教程。这是可行的,但问题是我必须将近12个窗口相互链接。在一个代码中完成所有这些将是一场灾难“将近12个窗口相互链接”您计划一次在屏幕上显示12个帧,并认为这可能会成功?顺便说一句,链接的线程为模式对话框或选项窗格提供了许多选择。在进一步评论之前,请务必阅读它。这是可行的,但问题是我必须将近12个窗口相互链接。在一个代码中完成所有这些将是一场灾难“将近12个窗口相互链接”您计划一次在屏幕上显示12个帧,并认为这可能会成功?顺便说一句,链接的线程为模式对话框或选项窗格提供了许多选择。在进一步评论之前,请务必阅读。