java - JPanel时钟和按钮合并

标签 java swing button jpanel clock

我在将时间和按钮合并在一起时遇到问题...

我无法在 JPanel 中显示按钮。

这是我的代码:

import java.awt.Color;
import java.awt.Font;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public final class Date_Time extends JFrame{
    private static final long serialVersionUID = 1L;
    private JPanel show_date_time = new JPanel();
    private JLabel time = new JLabel("Time:");
    private JLabel show_time = new JLabel("Show Time");

    DateFormat dateFormat2 = new SimpleDateFormat("h:mm:ss a");
    java.util.Date date2;
    private JLabel label;
    private JPanel panel;

     public Date_Time(){
        this.setSize(300, 300);
        this.setResizable(false);
        getContentPane().add(Show_Time_date());
     }
     private JButton button1 = new JButton();
     private JFrame frame1 = new JFrame();
    public JPanel Show_Time_date(){
        frame1.add(show_date_time);
        show_date_time.setBackground(Color.ORANGE);
        frame1.add(button1);
        getShow_date_time().setLayout(null);
        Font f;
        f = new Font("SansSerif", Font.PLAIN, 15);
        getTime().setBounds(0,250,400,30);
        getTime().setFont(f);
        getShow_date_time().add(getTime());
        setShow_time(new JLabel(""));
        updateDateTime();
        getShow_time().setBounds(37,250,400,30);
        getShow_time().setFont(f);
        getShow_date_time().add(getShow_time());
        return getShow_date_time();

    }

    public static void main(String[] args) {
        Date_Time Main_win=new Date_Time();
        Main_win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Main_win.setVisible(true);
    }

    public void updateDateTime()
    {
    Thread th = new Thread(new Runnable()
        {
            @Override
        public void run()
            {
            while(true)
                {
                date2 = new java.util.Date();
                String dateTime = dateFormat2.format(date2);
                    getShow_time().setText(dateTime);
                    getShow_time().updateUI();

                }
            }
        });
    th.start();
    }

    /**
     * @return the show_time
     */
    public JLabel getShow_time() {

        return show_time;
    }

    /**
     * @param show_time the show_time to set
     */
    public void setShow_time(JLabel show_time) {
        this.show_time = show_time;
    }

    /**
     * @return the time
     */
    public JLabel getTime() {
        return time;
    }

    /**
     * @param time the time to set
     */
    public void setTime(JLabel time) {
        this.time = time;
    }

    /**
     * @return the show_date_time
     */
    public JPanel getShow_date_time() {
        return show_date_time;
    }

    /**
     * @param show_date_time the show_date_time to set
     */
    public void setShow_date_time(JPanel show_date_time) {
        this.show_date_time = show_date_time;
    }

    /**
     * @return the label1
     */


    /**
     * @param label1 the label1 to set
     */


    /**
     * @return the label
     */
    public JLabel getLabel() {

        return label;
    }

    /**
     * @param label the label to set
     */
    public void setLabel(JLabel label) {
        this.label = label;
    }

    /**
     * @return the panel
     */
    public JPanel getPanel() {
        return panel;
    }

    /**
     * @param panel the panel to set
     */
    public void setPanel(JPanel panel) {
        this.panel = panel;
    }
}

最佳答案

看一下修改后的代码:

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public final class Date_Time extends JFrame{

    private static final long serialVersionUID = 1L;
    private JPanel show_date_time = new JPanel();
    private JLabel time = new JLabel("Time:");
    private JLabel show_time = new JLabel("Show Time");

    private DateFormat dateFormat2 = 
                new SimpleDateFormat("h:mm:ss a");
    private JButton button1 = new JButton("USELESS");           
    private java.util.Date date2;
    private JLabel label;
    private JPanel panel;

    public Date_Time(){        

        //this.setResizable(false);
        getContentPane().add(show_Time_date());
    }    

    public JPanel show_Time_date(){

        getShow_date_time().setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
        /*
         * Always set this Opaque property of the 
         * said JComponent to true, before
         * you change the Background Colour
         * of the said component in question.
         * In some Look And Feels it's set to
         * false by default, so you won't
         * see any colour, in such situations.
         */
        getShow_date_time().setOpaque(true);
        getShow_date_time().setBackground(Color.ORANGE);        

        Font f;
        f = new Font("SansSerif", Font.PLAIN, 15);

        getTime().setFont(f);
        getShow_date_time().add(getTime());
        setShow_time(new JLabel(""));

        updateDateTime();

        getShow_time().setFont(f);
        getShow_date_time().add(getShow_time());
        getShow_date_time().add(button1);

        return getShow_date_time();
    }

    public static void main(String[] args) {

        /*
         * Calls like pack()/setSize()/setVisible()
         * must be done from inside the Event Dispatch Thread
         * or the EDT in short. And not from your
         * Main Thread. Please read Concurrency in Swing
         * in detail from this link : 
         * http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html
         */
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                Date_Time main_win=new Date_Time();
                main_win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                main_win.setSize(250, 75);
                main_win.setVisible(true);
            }
        });        
    }

    public void updateDateTime()
    {
        Thread th = new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                while(true)
                {
                    date2 = new java.util.Date();
                    final String dateTime = dateFormat2.format(date2);
                    /*
                     * Any updates to the GUI, must also be done
                     * on the EDT - Event Dispatch Thread.
                     */
                    SwingUtilities.invokeLater(new Runnable()
                    {
                        public void run()
                        {
                            getShow_time().setText(dateTime);
                        }
                    });                    
                }
            }
        });
        th.start();
    }

    /**
     * @return the show_time
     */
    public JLabel getShow_time() {

        return show_time;
    }

    /**
     * @param show_time the show_time to set
     */
    public void setShow_time(JLabel show_time) {
        this.show_time = show_time;
    }

    /**
     * @return the time
     */
    public JLabel getTime() {
        return time;
    }

    /**
     * @param time the time to set
     */
    public void setTime(JLabel time) {
        this.time = time;
    }

    /**
     * @return the show_date_time
     */
    public JPanel getShow_date_time() {
        return show_date_time;
    }

    /**
     * @param show_date_time the show_date_time to set
     */
    public void setShow_date_time(JPanel show_date_time) {
        this.show_date_time = show_date_time;
    }

    /**
     * @return the label1
     */


    /**
     * @param label1 the label1 to set
     */


    /**
     * @return the label
     */
    public JLabel getLabel() {

        return label;
    }

    /**
     * @param label the label to set
     */
    public void setLabel(JLabel label) {
        this.label = label;
    }

    /**
     * @return the panel
     */
    public JPanel getPanel() {
        return panel;
    }

    /**
     * @param panel the panel to set
     */
    public void setPanel(JPanel panel) {
        this.panel = panel;
    }
}

关于java - JPanel时钟和按钮合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11381001/

相关文章:

java - 连续提示输入数字,直到该值落在某个范围内

java - 如何在不使用任何java内置函数的情况下在java中将数字转换为字符数组

java - 如何对基于 HashMap 值生成字符串的函数进行单元测试?

java - swing 无法打开网站

Android:按钮的 GridView 但按钮没有响应

java - Intellij IDEA 内置检查代码 vs checkstyle, PMD & findbugs

java - JOptionPane 对话框错误

javascript - React 禁用一个按钮,直到按下另一个按钮

ios - 通过单击第一个按钮 IOS7 更改第二个按钮图像

java - 用于 Netbeans/Swing 的类似 WireIt 的 GUI 库