用Java实现的Status Bar - TestStatusbar.java

本文介绍了一个名为StatusbarBuilder的Java组件的测试示例。该组件用于在Java Swing应用程序中快速构建状态栏,并展示了如何使用它来添加各种元素,如JLabel、JTextField和JButton等。

/*===============================================================================

 * 说明:

 * 这是StatusbarBuilder的一个测试。StatusbarBuilder是我新做的一个类,也可以说是

 * 我学java以来第一个比较满意的作品,虽然确实还存在一些问题。但时间不允许,所以暂告

 * 一段落。希望这个小东东能给你开发带来帮助。

 *===============================================================================

 * auto:    Jason

 * csdn:    Unagain

 * email:    tl21cen@hotmail

 * date: 2006-4-13

 *

 * from http://blog.youkuaiyun.com/unagain/archive/2006/04/13/661579.aspx

 */

package tl.util.test;

 

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.ComponentEvent;

import java.awt.event.ComponentListener;

 

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JTextArea;

import javax.swing.JTextField;

import javax.swing.border.BevelBorder;

 

import tl.util.StatusbarBuilder;

 

public class TestStatusbar {

    public static void main(String[] args) {

        StatusbarBuilder bar1, bar2;

      

        BevelBorder border =

           new BevelBorder(BevelBorder.LOWERED);

      

        JFrame fr1 = new JFrame();

        JFrame fr2 = new JFrame();

      

        fr1.setDefaultCloseOperation(

               JFrame.EXIT_ON_CLOSE);

       bar1 = StatusbarBuilder.getInstance(fr1);

        bar1.add(new JLabel("Main Window"), 100);

        bar1.add(new JTextField("JTextField"), 100);

      

        JButton btn = new JButton("JButton" );

        bar1.add(btn);

        bar1.notice("create bar using default setting.");

      

       final StatusbarBuilder bar = bar1;

       final JFrame fr = fr2;

        btn.addActionListener(

           new ActionListener(){

               public void actionPerformed(ActionEvent e){

                   fr.dispose();

                  if (fr == null) {

                      bar.notice("fr2 disposed.");

                      return;

                  }

                   bar.notice("show fr2.");

                   fr.setVisible(true);

                 

               }

           });

      

        JTextArea t1 = new JTextArea();

        t1.setBorder(border);

        fr1.add(t1,BorderLayout.CENTER);

      

        JTextArea t2 = new JTextArea();

        t2.setBorder(border);

        fr2.add(t2,BorderLayout.CENTER);

 

        fr2.setDefaultCloseOperation(

               JFrame.DISPOSE_ON_CLOSE);

      

       final JTextField notice = new JTextField();

        notice.addComponentListener(

           new ComponentListener(){

               public void componentResized(ComponentEvent e) {

                   notice.setText(e.paramString());

               }

               public void componentMoved(ComponentEvent e) {

                   notice.setText(e.paramString());

               }

               public void componentShown(ComponentEvent e) {

                   notice.setText(e.paramString());

               }

               public void componentHidden(ComponentEvent e) {

                   notice.setText(e.paramString());

               }

           });

        StatusbarBuilder.setNotice(notice);

        StatusbarBuilder.setBackground(Color.LIGHT_GRAY);

        StatusbarBuilder.setBarStyle(StatusbarBuilder.PLAIN);

        StatusbarBuilder.setGap(5);

        StatusbarBuilder.setHeight(30);

      

       bar2 = StatusbarBuilder.getInstance(fr2);

        bar2.add(new JLabel("Sub Window."));

        bar2.add(new JLabel("Hello"), 60);

 

      

        fr1.setPreferredSize(new Dimension(400, 300));

        fr2.setPreferredSize(new Dimension(300, 200));

 

        fr1.pack();

        fr2.pack();

        fr1.setVisible(true);

        fr2.setVisible(true);

    }

}

/*

// 另附

// 按默认设置,为一个已创建的JFrame对象fr创建一个状态条。
StatusbarBuilder statusBar = StatusbarBuilder.getInstance(fr);
 
// 在状态条中添加显示格
JLabel l = new JLabel("Hello")
statusBar.add(l, 40);
 
并不仅限于JLabel,只要属JComponent的子类就行。
以后,比如:l.setText("Good Morning"),会在状态条上显示。
 
程序中的信息可以在状态条的提示部分显示,比如:
statusBar.notice("准备完毕");
 
再比如,当按钮移动到一个菜单,或按钮时
statusBar.notice("该部件的功能……");

*/

您提供的 CSS 中 `.ui-outputlabel` 使用了 `float: right;` 但未能生效,可能的原因是 `float` 属性在 Flex 容器中不会起作用。这是因为 `.monitor-status-bar` 使用了 `display: flex;`,Flex 布局会忽略 `float` 属性。 要实现类似效果,可以使用 Flexbox 的特性来调整子元素的对齐方式。 ### 修改建议: 1. 移除 `.ui-outputlabel` 中的 `float: right;`。 2. 利用 Flexbox 的 `justify-content` 或 `margin-left: auto;` 来右对齐元素。 #### 修改后的 CSS 示例: ```css body .monitor-status-bar { position: fixed; top: 0; left: 0; width: 100%; z-index: 10; display: flex; justify-content: flex-end; /* 右对齐 */ align-items: center; /* 垂直居中 */ gap: 10px; padding: 0 10px; /* 可选:添加内边距 */ box-sizing: border-box; } body .monitor-status-bar .status-bar-item { font-size: 0.5rem !important; } body .monitor-status-bar .ui-clock { border: none; padding: 0; } body .monitor-status-bar .ui-outputlabel.status-label { color: White; font-weight: lighter; } body .monitor-status-bar .ui-outputlabel.status-ok { background: Green; } body .monitor-status-bar .ui-outputlabel.status-close { background: Red; } body .monitor-status-bar .ui-outputlabel.status-error { background: Orange; } ``` ### 总结: - `float` 在 Flex 容器中无效。 - 使用 Flexbox 的 `justify-content: flex-end;` 可以轻松实现右对齐。 - 如果希望某些元素单独右对齐,可以使用 `margin-left: auto;`。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值