找了很长时间了,没看到java里有 状态栏 这样的组件啊!
自己用JPanel和JTextField写吧,感觉效果不理想。
大大们是怎么实现你们的状态栏的啊?
自己用JPanel和JTextField写吧,感觉效果不理想。
大大们是怎么实现你们的状态栏的啊?
解决方案 »
- 什么原因会导致下面错误。。。
- 我刚装了netBeans4.1,在java类里中文显示乱码?
- 请问 C语言和Java应该先学习哪一个?
- 透明的水印效果如何实现?在线等....
- Applet 中能以共享的方式读取服务器中的文件吗
- 这学期,我们有数据库的课程设计,写一个软件,用Java来作容易吗?
- StringBuffer的变量'123456',怎样才能转换成Integer?
- 那里有J2EE下,www.sun.com 中只能下 J2SE,J2EE要注册码吗?如果要,是什么?
- 熟悉visibroker的大侠看过来呀
- java安全里面的PrivateKey和PublicKey是怎么初始化的??
- 新手问JTextField问题
- 工作经验问题
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.*;
import javax.swing.border.Border;public class MyStatusBar extends JPanel
{
private static Border COLUMN_PANE_BORDER =
BorderFactory.createCompoundBorder(
BorderFactory.createCompoundBorder(
BorderFactory.createMatteBorder(0, 0, 1, 1, SystemColor.controlLtHighlight),
BorderFactory.createMatteBorder(1, 1, 0, 0, SystemColor.controlShadow)),
BorderFactory.createEmptyBorder(0, 1, 0, 1));
private static Border COLUMN_PANE_BORDER_XP =
BorderFactory.createCompoundBorder(
BorderFactory.createCompoundBorder(
BorderFactory.createMatteBorder(0, 0, 0, 1, SystemColor.controlLtHighlight),
BorderFactory.createMatteBorder(0, 0, 0, 1, SystemColor.controlShadow)),
BorderFactory.createEmptyBorder(0, 1, 0, 1));
public MyStatusBar(int columnCount, Component[] columnComps,
int[] columnMinWidths, double[] columnResizeWeights)
{
super(new GridBagLayout());
String osName = System.getProperty("os.name");
boolean isXP = osName.toLowerCase().indexOf("xp") != -1;
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.weighty = 1; for (int i = 0; i < columnCount; i++) {
final int minWid = columnMinWidths[i]; JPanel columnPanel = new JPanel(new BorderLayout()) {
public Dimension getPreferredSize()
{
Dimension d = super.getPreferredSize();
d.width = Math.max(minWid, d.width);
return d;
}
};
if (!isXP) {
columnPanel.setBorder(COLUMN_PANE_BORDER);
}
else {
if (i == columnCount - 1) {
columnPanel.setBorder(BorderFactory.createEmptyBorder());
}
else {
columnPanel.setBorder(COLUMN_PANE_BORDER_XP);
}
}
gbc.weightx = columnResizeWeights[i];
if (i < columnCount - 1) {
gbc.insets = new Insets(0, 0, 0, 2);
}
else {
gbc.insets = new Insets(0, 0, 0, 0);
}
add(columnPanel, gbc);
if (columnComps == null) {
columnPanel.add(new JLabel(" ", JLabel.LEFT), BorderLayout.CENTER);
}
else {
columnPanel.add(columnComps[i], BorderLayout.CENTER);
}
}
}
public Component getComponentAtColumn(int column)
{
JPanel columnPanel = (JPanel) getComponent(column);
return columnPanel.getComponent(0);
}
public void setComponentAtColumn(int column, Component c) {
JPanel columnPanel = (JPanel) getComponent(column);
columnPanel.removeAll();
columnPanel.add(c, BorderLayout.CENTER);
revalidate();
repaint();
} public static void main(String[] args)
{
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
} Component[] comps = new Component[] {
new JLabel("5个项目", JLabel.LEFT),
new JLabel("765字节", JLabel.LEFT),
new JLabel("我的电脑", new ImageIcon(MyStatusBar.class.getResource("/imgs/mycomputer.png")), JLabel.LEFT)};
final MyStatusBar statusBar = new MyStatusBar(
3, comps, new int[] {100, 100, 150}, new double[] {1, 0, 0});
final JButton btn = new JButton("Start");
JPanel p = new JPanel();
p.add(btn);
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final JProgressBar progress = new JProgressBar();
progress.setBorder(BorderFactory.createEmptyBorder());
progress.setStringPainted(true); final Component oldComp = statusBar.getComponentAtColumn(0);
statusBar.setComponentAtColumn(0, progress);
btn.setEnabled(false);
new Thread() {
public void run() {
for (int i = 0; i <= 100; i++) {
final int value = i;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
progress.getModel().setValue(value);
}
}); try {
Thread.sleep(20);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
SwingUtilities.invokeLater(new Runnable() {
public void run() {
statusBar.setComponentAtColumn(0, oldComp);
btn.setEnabled(true);
}
});
}
}.start();
}
});
JFrame f = new JFrame("StatusBarTest");
f.getContentPane().setLayout(new BorderLayout(0, 2));
p.setBorder(COLUMN_PANE_BORDER);
f.getContentPane().add(p, BorderLayout.CENTER);
f.getContentPane().add(statusBar, BorderLayout.SOUTH);
f.setSize(500, 300);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
我是想用swing实现。
public JLabel lblObject,lblSize,lblDesc;
public MyStatusBar() {
super(BoxLayout.X_AXIS);
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
//设置被选对象数
lblObject = new JLabel("Selected Object(s):",SwingConstants.LEADING);
lblObject.setPreferredSize(new Dimension((int) (0.3 * screenSize.width),22));
lblObject.setBorder(BorderFactory.createLoweredBevelBorder());
this.add(lblObject, null);
//文件大小
lblSize = new JLabel("Size:", SwingConstants.LEADING);
lblSize.setPreferredSize(new Dimension((int) (0.3 * screenSize.width),22));
lblSize.setBorder(BorderFactory.createLoweredBevelBorder());
this.add(lblSize, null);
//文件描述
lblDesc = new JLabel("Description: Resource Manager", SwingConstants.LEADING);
lblDesc.setPreferredSize(new Dimension((int) (0.5 * screenSize.width),22));
lblDesc.setBorder(BorderFactory.createLoweredBevelBorder());
this.add(lblDesc, null);
}