【发布时间】:2014-08-21 01:59:12
【问题描述】:
这是我的java代码的一部分,在这段代码中我希望进度条应该始终保持在标签下(在标签的后面),当我启动程序时进度条在标签下,但是进度条当我单击按钮并开始进度时,会出现在标签上。所以请告诉我怎样才能让标签总是在进度条上???
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;
public class Test {
JFrame frame = new JFrame();
JLabel label = new JLabel();
JProgressBar bar = new JProgressBar(JProgressBar.VERTICAL,0,100);
JButton button = new JButton();
public static void main(String arg[]) {
new Test();
}
public Test() {
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setUndecorated(true);
frame.setLayout(null);
label.setOpaque(true);
label.setBackground(Color.BLACK);
label.setBounds(100,100,100,50);
bar.setBounds(140,25,20,200);
button.setBounds(220,100,50,50);
button.addActionListener(new Progress());
frame.add(label);
frame.add(bar);
frame.add(button);
frame.setVisible(true);
}
class Progress extends SwingWorker<Void, Void> implements ActionListener {
public Void doInBackground() {
for(int i=0; i<101; i++) {
bar.setValue(i);
try {
Thread.sleep(100);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
public void actionPerformed(ActionEvent e) {
this.execute();
}
}
}
【问题讨论】:
-
不要使用空布局。学习和使用布局管理器。
-
为什么需要这样做?你不能改用
JProgressBar#setStringPainted吗?避免使用null布局,像素完美的布局是现代 ui 设计中的一种错觉。影响组件单个尺寸的因素太多,您无法控制。 Swing 旨在与核心布局管理器一起工作,丢弃这些将导致无穷无尽的问题和问题,您将花费越来越多的时间来尝试纠正 -
@HovercraftFullOfEels 为什么人们会考虑按照设计使用的方式使用工具?什么启示...
-
有没有办法解决我保持空布局的问题???
-
@KickButtowski 我仍在尝试找出
JProgressBar#setStringPainted的问题所在
标签: java swing layout-manager null-layout-manager