我正在使用JProgressBar组件以及Nimbus UI Defaults.问题是,当我想手动更改每个进度条的条形颜色时,我BasicProgressBarUI通过设置JProgressBar.setUI()功能来使用.这会带来更多麻烦,因为我想改变条形颜色,似乎我松开了jprogressbar的默认外观(Border,backgroundcolor dissappears).
所以我可以UIDefaults在代码初始化时设置Nimbus ProgressBar.有用.
但我想动态更改每个进度条的条形颜色.
有没有其他方法可以改变条形颜色JProgressBar?
public class ProgressGenerator extends JFrame {
protected int minValue = 0;
protected int maxValue = 100;
protected int counter = 0;
protected JProgressBar progressBar;
public ProgressGenerator() {
super("JProgressBar Demo");
setSize(300, 100);
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InstantiationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// …Run Code Online (Sandbox Code Playgroud) 我知道这个问题已经在许多问题上被看到并且已经得到了回答,但是,我仍然无法理解它.
我只想在提取大型xml文件的某些内容时更新progressBar.我认为在不同的线程中使用耗时的循环已经足够了但是?所有我设法获得的是progressBar要么根本没有显示,要么在结束之前更新,就在它关闭之前.
实例在应用程序启动附近的某处,我有:
public class SomeClass {
private SomeClass () {
myXMLParser reader = new myXMLParser();
CoolStuff fromXml = reader.readTheXml();
}
}
Run Code Online (Sandbox Code Playgroud)
使用JProgressBar显示和更新JDialog时:
public class LoadingDialog extends JDialog {
private JProgressBar progressBar;
/* ... */
public void progress() {
progressBar.setValue(progressBar.getValue() + 1);
}
}
Run Code Online (Sandbox Code Playgroud)
所以我有这个myXMLParser:
public class myXMLParser {
private LoadingDialog loadingDialog = new LoadingDialog();
public CoolStuff readTheXml() {
CoolStuff fromXml = new CoolStuff();
while(manyIterations) {
loadingDialog.progress();
fromXml.add(some() + xml() + reading()); …Run Code Online (Sandbox Code Playgroud) 好的,我有以下代码.
public class MyProgressBar extends JPanel implements MyData, Serializable {
/**
*
*/
public static final int MAX = 10000;
public static final int WIDTH = 400;
public static final int HEIGHT = 75;
private JProgressBar MyBar = new JProgressBar( SwingConstants.HORIZONTAL, 0, MAX );
private JFrame MyFrame = new JFrame();
private int MyValue = 0;
private Thread MyThread = new Thread( new ProgressThread() );
public MyProgressBar() {
add(MyBar);
int x = ( MyData.SCREEN.width / 2 ) - ( WIDTH / …Run Code Online (Sandbox Code Playgroud) 我正在浏览这个帖子
我想将此添加到我的代码中,这样我就可以得到一个jProgressBar和一个Button,(最好使用netbeans)
因此,当我按下按钮时,它会从0到100稳定地运行,我真的试图自己去做这个并且真的很生气,任何帮助都会很好.
是否可以根据进度值更改条形颜色?我尝试了以下但它不起作用:
percentUsed = (int)(((float) used / (float) max) * BAR_PERCENTAGE);
if (percentUsed >= ORANGE_THRESHOLD && percentUsed < RED_THRESHOLD) {
if (!m_orangeIndicator) {
LOG.warn(String.format("Memory usage exceeds %d percent.", ORANGE_THRESHOLD));
m_orangeIndicator = true;
}
colour = Color.ORANGE;
m_redIndicator = false;
}
else if (percentUsed >= RED_THRESHOLD) {
if (!m_redIndicator) {
LOG.warn(String.format("Memory usage exceeds %d percent.", RED_THRESHOLD));
m_orangeIndicator = true;
m_redIndicator = true;
}
colour = Color.RED;
}
else {
m_orangeIndicator = false;
m_redIndicator = false;
colour = Color.GREEN;
}
m_memUsageBar.setForeground(colour);
m_memUsageBar.setValue(percentUsed);
m_memUsageBar.updateUI(); …Run Code Online (Sandbox Code Playgroud) 我有以下代码来复制目录和文件,但不知道在哪里测量进度.有人可以帮助
我在哪里可以测量复制了多少并在JProgress栏中显示它
public static void copy(File src, File dest)
throws IOException{
if(src.isDirectory()){
if(!dest.exists()){ //checking whether destination directory exisits
dest.mkdir();
System.out.println("Directory copied from "
+ src + " to " + dest);
}
String files[] = src.list();
for (String file : files) {
File srcFile = new File(src, file);
File destFile = new File(dest, file);
copyFolder(srcFile,destFile);
}
}else{
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest);
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) > 0){ …Run Code Online (Sandbox Code Playgroud) 像这个问题,我想用Java中的Swing做同样的事情.我在NetBeans上查找了JProgressBar,但我找不到这样的选项.还有另一个组件可以执行此任务,或者JProgressBar中有一个选项?
以这种方式使用此组件的原因与该问题的OP相同.
我一直在浏览SO和谷歌一段时间来回答这个问题,但我似乎无法找到一个真正有用的.我将从头开始:
我创建了一个Java类,其中包含一个在后台运行批处理文件的方法(命令窗口不会出现).该程序运行良好,但对最终用户来说会有点混乱,因为批处理文件需要一段时间才能完成 - 用户不知道程序是否仍在运行.批处理脚本完成执行后,会出现一个消息对话框,说明它已完成,但是在运行方法和对话框出现之间的一段时间内,看起来好像程序什么也没做.
所以这是我的问题:我非常希望显示一个带有文本区域的新框架,该文本区域显示批处理文件的输出.但是,据我所知,如果不创建临时文件,写入文件,从中读取文件等,这很难做到.如果可能的话,我宁愿避免这样做.因此,我已经决定在进程运行时显示不确定的JProgressBar可能会更好,并在进程完成时关闭它.不幸的是,我不认为Swing可以处理这个问题,因为它需要同时运行多个进程.我听说过SwingWorker,但我不确定在这种情况下如何使用它.我有以下SSCCE,它可以工作,但没有实现进度条.
public myClass(){
public static void main(String[] args){
String[] commands = {"cmd.exe", "/C", "C:\\users\\....\\myBat.bat"};
Process p = Runtime.getRuntime().exec(commands);
p.waitFor()
JOptionPane.showMessageDialog(null, "Process finished!");
}
}
Run Code Online (Sandbox Code Playgroud)
当p.waitFor()等待进程时,屏幕上没有任何内容.我只是希望向用户显示进程仍在运行的内容.思考?谢谢!
我有一个SwingWorker类加载一个文本文件并将其切片到块进行进一步处理.
这是SwingWorker班级:
public class ConverterWorker extends SwingWorker<String, String>
{
private final File f;
private final JLabel label;
public ConverterWorker(File f, JLabel label)
{
this.f = f;
this.label = label;
}
@Override
protected String doInBackground() throws Exception
{
NMTMain.convertableData = getDataSets(f);
if(!NMTMain.convertableData.isEmpty())
{
return "Done";
}
else
{
publish("Failed to load the file!");
return "Failed";
}
}
@Override
public void done()
{
try
{
label.setText(get());
}
catch (Exception e)
{
e.printStackTrace(System.err);
System.out.println("error");
}
}
@Override
protected void …Run Code Online (Sandbox Code Playgroud) 我希望能够隐藏JProgressBar并使其所在的面板不会改变大小.
目前,当我将进度条设置为visible(via pb.setVisible(true))时,我得到如下布局:
然后,当我将其设置为不可见时,我得到以下布局:
我想我在这里很容易丢失一些东西,我看不出它是什么.
如何强制隐藏的JProgressBar仍然占用房地产(特别是垂直房地产)?
代码在下面,因为它的价值.我对错过的概念比代码的细节更感兴趣.:-)
package pbtest;
public class MyFrame extends javax.swing.JFrame {
public MyFrame() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
pb = new javax.swing.JProgressBar();
bnVis = …Run Code Online (Sandbox Code Playgroud) java ×10
jprogressbar ×10
swing ×10
swingworker ×4
progress-bar ×2
colors ×1
file-io ×1
joptionpane ×1
netbeans ×1
nimbus ×1
runnable ×1
thread-sleep ×1
uimanager ×1