Java 如何使用第一帧中的按钮使一帧显示在另一帧旁边

Java 如何使用第一帧中的按钮使一帧显示在另一帧旁边,java,swing,jframe,illegalargumentexception,Java,Swing,Jframe,Illegalargumentexception,我目前正在创建一个数字闹钟,我当前的代码创建一个框架,然后使用另一个类尝试在第一个框架的侧面创建另一个框架,该框架向用户显示一些组合框,其中填充了小时/分钟,允许用户设置闹钟。 我怎样才能有效地做到这一点? 为什么我的控制台应用程序会在当前配置中启动大量错误?以及不允许我的组合框显示 我尝试创建一个单独的类,用于继承,创建了一个实例,并将其添加到上一个框架中,使其相对靠近它打开 import java.awt.Color; import java.awt.Font; import java.aw

我目前正在创建一个数字闹钟,我当前的代码创建一个框架,然后使用另一个类尝试在第一个框架的侧面创建另一个框架,该框架向用户显示一些组合框,其中填充了小时/分钟,允许用户设置闹钟。 我怎样才能有效地做到这一点? 为什么我的控制台应用程序会在当前配置中启动大量错误?以及不允许我的组合框显示

我尝试创建一个单独的类,用于继承,创建了一个实例,并将其添加到上一个框架中,使其相对靠近它打开

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.time.LocalDateTime;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Digital_Clock extends JPanel implements ActionListener {

    private static final long serialVersionUID = 1L;
    private static final int BTN_HEIGHT = 0;
    private static final int BTN_WIDTH = 0;
    private JFrame frame;
    private JButton button;`enter code here`

    private final int WINDOW_HEIGHT = 500;
    private final int WINDOW_WIDTH = 500;
    private int hours;
    private int mins;
    private int seconds;
    private String hoursString;
    private String secondsString;
    private String minutesString;
    public String Time = " ";
    private Font timeFont = new Font("Arial", Font.CENTER_BASELINE, 60);
    private Font titleFont = new Font("Arial", Font.CENTER_BASELINE, 30);
    private String[] hourCombos = {"00","01","02","03","04","05","06","07","08","09"
            ,"10","11","12","13","14","15","16","17","18","19","20","21","22",""
                    + "23","24"};
    private String[] minutesCombos = {"00","01","02","03","04","05","06","07","08","09","10","11",""
            + "12","13","14","15"
            ,"16","17","18","19","20","21","22","23","24","25","26","27","28","29","30"
                    + "31","32","33","34","35","36","37","38","39","40"
            ,"41","42","43","44","45","46","47","48","49","50","51","52","53",
            "54","55","56","57","58","59","60"};


    public Digital_Clock() {

        setFrame();
        setLabel();
        setButton();

        updateClock();

    }

    public static void main(String[] args) {
        new Digital_Clock();

    }

    public void paint(Graphics g) {
        super.paint(g);
        g.setFont(timeFont);
        g.setColor(Color.BLUE);
        g.drawString(Time, 130, 230);

    }

    private void setLabel() {
        JLabel Header = new JLabel();
        Header.setText("LDot's Digital Clock");
        Header.setFont(titleFont);
        Header.setBounds(110, 0, 400, 50);
        Header.setVisible(true);
        add(Header);
    }

    private void setButton() {
        Button logBtn = new Button("Log Time");
        Button quitBtn = new Button("Quit");
        Button setAlarmBtn = new Button("Set Alarm");
        Button changeBackgroundBtn = new Button("Change Background");

        quitBtn.setBounds(50, 400, 100, 50);
        setAlarmBtn.setBounds(350, 400, 100, 50);
        changeBackgroundBtn.setBounds(170, 300, 150, 50);
        logBtn.setBounds(200, 400, 100, 50);
        add(setAlarmBtn);
        add(changeBackgroundBtn);
        add(quitBtn);
        add(logBtn);

        setAlarmBtn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {

                setAlarmFrame();
            }

        });

        logBtn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent lb) {

                System.out.println(Time);

            }

        });
        quitBtn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent qt) {
                // TODO Auto-generated method stub
                System.exit(0);
            }

        });

    }

    private void setFrame() {
        frame = new JFrame();
        frame.setTitle("LDot's Digital Clock");
        frame.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
        setLocation(100, 100);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(null);

        frame.setResizable(false);
        frame.setVisible(true);
        frame.add(this);

    }

    private void setAlarmFrame() {
        Alarm_Window alarmWindow = new Alarm_Window("Set An Alarm");
        frame.add(alarmWindow);
        alarmWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        setLayout(null);
        JComboBox hourCombo = new JComboBox(hourCombos);
        JComboBox minuteCombo = new JComboBox(minutesCombos);



        hourCombo.setBounds(200,200,40,40);
        minuteCombo.setBounds(300,300,40,40);

        alarmWindow.add(hourCombo);
        alarmWindow.add(minuteCombo);
    }

    private void setTime() {

        hours = LocalDateTime.now().getHour();
        mins = LocalDateTime.now().getMinute();
        seconds = LocalDateTime.now().getSecond();

    }

    private void update() {
        ActionListener task = new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                updateClock();

            }

        };
        Timer timer = new Timer(100, task);
        timer.setRepeats(false);
        timer.start();

    }

    private void setString() {
        if (seconds < 10) {
            secondsString = "0";
        } else {
            secondsString = "";
        }

        if (mins < 10) {
            minutesString = "0";
        } else {
            minutesString = "";
        }

        if (hours < 10) {
            hoursString = "0";
        } else {
            hoursString = "";
        }

        secondsString += String.valueOf(seconds);
        minutesString += String.valueOf(mins);
        hoursString += String.valueOf(hours);

        Time = hoursString + ":" + minutesString + ":" + secondsString;

    }

    private void updateClock() {
        setTime();
        setString();
        update();
        repaint();

    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub

    }

}

import java.awt.Color;

import javax.swing.JButton;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;

public class Button extends JButton {
    private String title;
    private Border aBorder = new LineBorder(Color.black, 4);

    Button(String title){
        setText(title);
        setBackground(Color.LIGHT_GRAY);
        setForeground(Color.black);
        setFocusable(false);

    }
}

import javax.swing.JFrame;

public class Alarm_Window extends JFrame{
    private String title = "Set Alarm";
    private final int ALARM_WINDOW_HEIGHT= 400;
    private final int ALARM_WINDOW_WIDTH = 400;

    Alarm_Window(String title){
        setSize(ALARM_WINDOW_HEIGHT,ALARM_WINDOW_WIDTH);
        setVisible(true);

    }
}`
1) 为了更快地获得更好的帮助,请添加或。2) 请参见3)Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。相反,可以使用布局管理器,或者与布局填充和边框一起使用。1)为了更快地获得更好的帮助,可以添加或。2) 请参见3)Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或与布局填充和边框一起使用。
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: adding a window to a container
    at java.awt.Container.checkNotAWindow(Unknown Source)
    at java.awt.Container.addImpl(Unknown Source)
    at java.awt.Container.add(Unknown Source)
    at javax.swing.JFrame.addImpl(Unknown Source)
    at java.awt.Container.add(Unknown Source)
    at Digital_Clock.setAlarmFrame(Digital_Clock.java:140)
    at Digital_Clock.access$0(Digital_Clock.java:138)
    at Digital_Clock$1.actionPerformed(Digital_Clock.java:97)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)