这是我想仿造windows右下角的日期和时间做一个java的图形用户界面的代码,单独的日历和时间的代码知道,但不知道怎么左右布局的,就是红色那不知道怎么写,哪位帮我看看,谢了!
import javax.swing.BoxLayout;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JTabbedPane;
import javax.swing.border.Border;
public class pang extends JFrame{
public pang(){
super("张学友");
JPanel simpleBorders=new JPanel();
JTabbedPane tabbedPane=new JTabbedPane(); dateTime.add(new Clock(),BorderLayout.EAST);
dateTime.add(new Riqi(),BorderLayout.WEST);

              
                  tabbedPane.addTab("日期与时间",simpleBorders);
getContentPane().add(tabbedPane,BorderLayout.CENTER);
}
public static void main(String[] args) {
        JFrame.setDefaultLookAndFeelDecorated(true);        JFrame frame = new pang();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        frame.pack();
        frame.setVisible(true);
        frame.setSize(400,400);
    }
    class Clock extends JPanel{
private static final long serialVersionUID = 1L;
public Clock(){
}
}
class Riqi extends JPanel{
private static final long serialVersionUID = 1L;
public Riqi(){
}
}
}

解决方案 »

  1.   

    java api里有很多,流布局,网格布局等,自己去找
      

  2.   

    左右平分,可以用GridLayout
    import java.awt.Color;
    import java.awt.GridLayout;import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTabbedPane;public class pang extends JFrame {
    public pang() {
    super("张学友");
    this.setSize(400, 400);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel simpleBorders = new JPanel();
    simpleBorders.setLayout(new GridLayout(1,2));
    simpleBorders.add(new Clock());
    simpleBorders.add(new Riqi());
    JTabbedPane tabbedPane = new JTabbedPane();
    tabbedPane.addTab("日期与时间", simpleBorders);
    getContentPane().add(tabbedPane);
    } public static void main(String[] args) {
    JFrame.setDefaultLookAndFeelDecorated(true);
    JFrame frame = new pang();
    frame.setVisible(true);
    } class Clock extends JPanel {
    private static final long serialVersionUID = 1L;
    public Clock() {
    setBackground(Color.RED);
    }
    } class Riqi extends JPanel {
    private static final long serialVersionUID = 1L;
    public Riqi() {
    setBackground(Color.BLUE);
    }
    }
    }
      

  3.   

       下面是我用Netbeans做的界面,整个frame用边框式布局(BorderLayout),‘时间和日期’中是自由布局,‘日期’和‘时间’是放在一个JPanel中的,采用网格式布局(GirdLayout),这样不管是最大化或变小图片都会保持这个比例,不会变型,看下效果:   下面是源码:package com.monitor1394.layout;import java.awt.Dimension;
    import java.awt.Toolkit;/*
     * MainUI.java
     *
     * 模仿Window中的时间和日期界面
     *
     * @author monitor
     * Created on 2010-12-24, 13:23:16
     */
    public class MainUI extends javax.swing.JFrame {    /** 构造一个MainUI对象 */
        public MainUI() {
            initComponents();
            beCenter();
        }    /** 居中对齐 */
        private void beCenter(){
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            int screenWidth=(int)screenSize.getWidth();
            int screenHeight=(int)screenSize.getHeight();
            int width=this.getWidth();
            int height=this.getHeight();
            this.setBounds((screenWidth-width)/2,(screenHeight-height)/2,width ,height);
        }
        
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">
        private void initComponents() {        jPanel1 = new javax.swing.JPanel();
            useButton = new javax.swing.JButton();
            cancelButton = new javax.swing.JButton();
            sureButton = new javax.swing.JButton();
            jPanel2 = new javax.swing.JPanel();
            jTabbedPane1 = new javax.swing.JTabbedPane();
            jPanel3 = new javax.swing.JPanel();
            jLabel1 = new javax.swing.JLabel();
            jPanel6 = new javax.swing.JPanel();
            datePanel = new javax.swing.JPanel();
            timePanel = new javax.swing.JPanel();
            jPanel4 = new javax.swing.JPanel();
            jPanel5 = new javax.swing.JPanel();        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            setTitle(" 日期和时间 属性");        useButton.setText("应用(A)");        cancelButton.setText("取消");        sureButton.setText("确认");        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
            jPanel1.setLayout(jPanel1Layout);
            jPanel1Layout.setHorizontalGroup(
                jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                    .addContainerGap(240, Short.MAX_VALUE)
                    .addComponent(sureButton, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(cancelButton, javax.swing.GroupLayout.PREFERRED_SIZE, 76, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(useButton))
            );
            jPanel1Layout.setVerticalGroup(
                jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(useButton)
                    .addComponent(cancelButton)
                    .addComponent(sureButton))
            );        getContentPane().add(jPanel1, java.awt.BorderLayout.PAGE_END);        jPanel2.setLayout(new java.awt.GridLayout());        jPanel3.setBackground(new java.awt.Color(255, 255, 255));        jLabel1.setText("当前时区:中国标准时间");        jPanel6.setLayout(new java.awt.GridLayout());        datePanel.setBackground(new java.awt.Color(255, 255, 255));
            datePanel.setBorder(javax.swing.BorderFactory.createTitledBorder("日期(D)"));        javax.swing.GroupLayout datePanelLayout = new javax.swing.GroupLayout(datePanel);
            datePanel.setLayout(datePanelLayout);
            datePanelLayout.setHorizontalGroup(
                datePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 209, Short.MAX_VALUE)
            );
            datePanelLayout.setVerticalGroup(
                datePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 207, Short.MAX_VALUE)
            );        jPanel6.add(datePanel);        timePanel.setBackground(new java.awt.Color(255, 255, 255));
            timePanel.setBorder(javax.swing.BorderFactory.createTitledBorder("时间(T)"));        javax.swing.GroupLayout timePanelLayout = new javax.swing.GroupLayout(timePanel);
            timePanel.setLayout(timePanelLayout);
            timePanelLayout.setHorizontalGroup(
                timePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 209, Short.MAX_VALUE)
            );
            timePanelLayout.setVerticalGroup(
                timePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 207, Short.MAX_VALUE)
            );        jPanel6.add(timePanel);        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
            jPanel3.setLayout(jPanel3Layout);
            jPanel3Layout.setHorizontalGroup(
                jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel3Layout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jPanel6, javax.swing.GroupLayout.DEFAULT_SIZE, 450, Short.MAX_VALUE)
                        .addComponent(jLabel1))
                    .addContainerGap())
            );
            jPanel3Layout.setVerticalGroup(
                jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
                    .addComponent(jPanel6, javax.swing.GroupLayout.DEFAULT_SIZE, 236, Short.MAX_VALUE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addComponent(jLabel1)
                    .addContainerGap())
            );        jTabbedPane1.addTab("日期和时间", jPanel3);        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
            jPanel4.setLayout(jPanel4Layout);
            jPanel4Layout.setHorizontalGroup(
                jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 470, Short.MAX_VALUE)
            );
            jPanel4Layout.setVerticalGroup(
                jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 271, Short.MAX_VALUE)
            );        jTabbedPane1.addTab("时区", jPanel4);        javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
            jPanel5.setLayout(jPanel5Layout);
            jPanel5Layout.setHorizontalGroup(
                jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 470, Short.MAX_VALUE)
            );
            jPanel5Layout.setVerticalGroup(
                jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 271, Short.MAX_VALUE)
            );        jTabbedPane1.addTab("Internet时间", jPanel5);        jPanel2.add(jTabbedPane1);        getContentPane().add(jPanel2, java.awt.BorderLayout.CENTER);        pack();
        }// </editor-fold>    // Variables declaration - do not modify
        private javax.swing.JButton cancelButton;
        private javax.swing.JPanel datePanel;
        private javax.swing.JLabel jLabel1;
        private javax.swing.JPanel jPanel1;
        private javax.swing.JPanel jPanel2;
        private javax.swing.JPanel jPanel3;
        private javax.swing.JPanel jPanel4;
        private javax.swing.JPanel jPanel5;
        private javax.swing.JPanel jPanel6;
        private javax.swing.JTabbedPane jTabbedPane1;
        private javax.swing.JButton sureButton;
        private javax.swing.JPanel timePanel;
        private javax.swing.JButton useButton;
        // End of variables declaration
    }
      

  4.   

    假如我有一个时间java,怎么加上去呢?
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.geom.Ellipse2D;
    import java.awt.geom.Line2D;
    import java.awt.geom.Point2D;
    import java.util.Calendar;import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.Timer;public class ClockTest { public static void main(String[] args) {
      ClockFrame cf = new ClockFrame();
      cf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      cf.setVisible(true);
     }}class ClockFrame extends JFrame {
     private static final long serialVersionUID = 1L;
     
     private ClockPanel panel;
     private Calendar calendar;
     
     public ClockFrame() {
      setTitle("Clock");
      setResizable(false);
      
      Toolkit kit = Toolkit.getDefaultToolkit();
      Dimension screen = kit.getScreenSize();
      int screenX = screen.width;
      int screenY = screen.height;
      setLocation(screenX / 3,screenY / 3);
      
      ActionListener listener = new ActionListener(){   public void actionPerformed(ActionEvent e) {
        calendar = getClock();
        
        String h = String.valueOf(calendar.get(Calendar.HOUR_OF_DAY));
        String m = String.valueOf(calendar.get(Calendar.MINUTE));
        String s = String.valueOf(calendar.get(Calendar.SECOND));
        
        TextPanel tp = new TextPanel(h,m,s);
        add(tp,BorderLayout.NORTH);
        
        panel = new ClockPanel(h,m,s);
        add(panel,BorderLayout.CENTER);
        
        pack();    
       }  
      };
      
      new Timer(1000,listener).start();
     }
     
     public Calendar getClock() {
      Calendar calendar = Calendar.getInstance();
      return calendar;
     }
    }class TextPanel extends JPanel {
     private static final long serialVersionUID = 1L;
     
     private JTextField hourField;
     private JTextField minuteField;
     private JTextField secondField;
     
     public TextPanel(String h,String m,String s) {
      setBackground(Color.white);
      
      add(new JLabel("时钟:"));
      hourField = new JTextField(h,3);
      hourField.setEditable(false);
      add(hourField);
      
      add(new JLabel("分钟:"));
      minuteField = new JTextField(m,3);
      minuteField.setEditable(false);
      add(minuteField);
      
      add(new JLabel("秒钟:"));
      secondField = new JTextField(s,3);
      secondField.setEditable(false);
      add(secondField);
     }
    }class ClockPanel extends JPanel {
     private static final long serialVersionUID = 1L;
     
     private double seconds = 0;
     private double minutes = 0;
     private double hours = 0; private int RADIUS = 100;
     
     private double SECOND_HAND_LENGTH = 0.8 * RADIUS;
     private double MINUTE_HAND_LENGTH = 0.8 * RADIUS;
     private double HOUR_HAND_LENGTH = 0.7 * RADIUS;
     
     private int centerX = 0;
     private int centerY = 0;
     
     public ClockPanel(String h,String m,String s) {
      setBackground(Color.pink);
      
      hours = Double.parseDouble(h);
      minutes = Double.parseDouble(m);
      seconds = Double.parseDouble(s);
      
      setPreferredSize(new Dimension(2 * RADIUS + 100,2 * RADIUS + 100));
     } public void paintComponent(Graphics g) {
      super.paintComponent(g);
      Graphics2D gs = (Graphics2D)g;
      
      centerX = this.getWidth() / 2;
      centerY = this.getHeight() / 2;
      
      gs.setColor(Color.GREEN);
      gs.drawString("张学义", centerX - 20, centerY - RADIUS / 2);
      gs.drawString("MADE IN CHINA", centerX - 40, centerY + RADIUS / 2);
      
      gs.setColor(Color.WHITE);
      for(double nlLoop = 0; nlLoop <= 2; nlLoop = nlLoop + 0.1) {
       Ellipse2D circle = new Ellipse2D.Double(
         centerX - RADIUS + 15 + nlLoop,
         centerY - RADIUS + 15 + nlLoop,
         2 * (RADIUS - 15),
         2 * (RADIUS - 15));
       gs.draw(circle);
      }
      for(double nlLoop = 0; nlLoop <= 2; nlLoop = nlLoop + 0.1) {
       Ellipse2D circle = new Ellipse2D.Double(
         centerX - RADIUS - 9 + nlLoop,
         centerY - RADIUS - 9 + nlLoop,
         2 * (RADIUS + 9),
         2 * (RADIUS + 9));
       gs.draw(circle);
      }
      
      String[] timer = {"Ⅰ","Ⅱ","Ⅲ","Ⅳ","Ⅴ","Ⅵ","Ⅶ","Ⅷ","Ⅸ","Ⅹ","Ⅺ","Ⅻ"};
      gs.setColor(Color.RED);
      int gX = centerX - 3;
      int gY = centerY - RADIUS + 5;
      for(int i = 0; i < 12; i ++) {
       int x = (int) (gX + RADIUS * Math.sin(2 * Math.PI * (i + 1) / 12));
       int y = (int) (gY + RADIUS * (1.0 - Math.cos(2 * Math.PI * (i + 1) / 12)));
       
       gs.drawString(timer[i], x, y);
      }
      
      double secondAngle = Math.toRadians(360 * seconds / 60);
      drawHand(gs,secondAngle,SECOND_HAND_LENGTH,"s");
      
      double minuteAngle = Math.toRadians(360 * (minutes + seconds / 60) / 60);
      drawHand(gs,minuteAngle,MINUTE_HAND_LENGTH,"m");
      
      double hourAngle = Math.toRadians(360 * (hours - 12) / 12 + 360 * minutes / (60 * 12));
      drawHand(gs,hourAngle,HOUR_HAND_LENGTH,"h");
     }
     
     private void drawHand(Graphics2D gc,double angle,double hand,String l) {
      Point2D center = new Point2D.Double(centerX,centerY);
      Point2D end = new Point2D.Double(
        centerX + hand * Math.sin(angle),
        centerY - hand * Math.cos(angle));
      if(l.equals("h")) {
       gc.setColor(Color.RED);
      } else if(l.equals("m")) {
       gc.setColor(Color.green);
      } else if(l.equals("s")) {
       gc.setColor(Color.BLUE);
      }
      gc.draw(new Line2D.Double(center,end));
     }
     
    }