我在将时间和按钮合并在一起时遇到问题...
我无法在 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/