在Java Lanterna中使用ProgressBar

发布于 2025-02-11 03:42:27 字数 1242 浏览 2 评论 0原文

我尝试使用以下内容:

    ProgressBar Prog=new ProgressBar(0,100,50);
    Prog.setValue(0)
    //
    BufferedReader bf = new BufferedReader(new FileReader(file1));
    String line = bf.readLine();
        while (line != null) {
                lines.add(line);
                Prog.setValue((int)(100*(double)lines.size()/MaxLen)); //ProgressBar  will ot be updated
      
                line = bf.readLine();

        }
            bf.close();  

我还尝试了此方法:

 ProgressBar.DefaultProgressBarRenderer DP=new ProgressBar.DefaultProgressBarRenderer();
 DP.drawComponent((TextGUIGraphics)gui.getScreen().newTextGraphics(),Prog  );

它不起作用

 com.googlecode.lanterna.screen.AbstractScreen$1 cannot be cast to com.googlecode.lanterna.gui2.TextGUIGraphics

GUI是多WindowTextGui属于CONTEX,但由于铸造问题: EDIT2:在组件填充中,

Prog.setRenderer(new ProgressBar.DefaultProgressBarRenderer());

,它需要此:和一个计时器:

   Timer timer = new Timer("ProgressBar-timer", true);
         timer.schedule(new TimerTask() {
             @Override
             public void run() {
                //Do some thing
             }
         }, 10, 10);

I tried to use ProgressBar as below:

    ProgressBar Prog=new ProgressBar(0,100,50);
    Prog.setValue(0)
    //
    BufferedReader bf = new BufferedReader(new FileReader(file1));
    String line = bf.readLine();
        while (line != null) {
                lines.add(line);
                Prog.setValue((int)(100*(double)lines.size()/MaxLen)); //ProgressBar  will ot be updated
      
                line = bf.readLine();

        }
            bf.close();  

I also tried this method:

 ProgressBar.DefaultProgressBarRenderer DP=new ProgressBar.DefaultProgressBarRenderer();
 DP.drawComponent((TextGUIGraphics)gui.getScreen().newTextGraphics(),Prog  );

GUI is MultiWindowTextGUI belong to contex, but it does not work because of Cast Problem:

 com.googlecode.lanterna.screen.AbstractScreen$1 cannot be cast to com.googlecode.lanterna.gui2.TextGUIGraphics

Edit2:in component aproach, it need this:

Prog.setRenderer(new ProgressBar.DefaultProgressBarRenderer());

and a timer:

   Timer timer = new Timer("ProgressBar-timer", true);
         timer.schedule(new TimerTask() {
             @Override
             public void run() {
                //Do some thing
             }
         }, 10, 10);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

猫七 2025-02-18 03:42:27

假设您想以某种方式在屏幕上绘制一个进度栏。

问题,

但是gui.getScreen()。newTextGraphics()给出 textgraphics and ofeed textguigraphics

在给定渲染器给定的屏幕上

,您可以使用它在屏幕上绘制progressbar

Therefore, use the renderer's method

// Given
MultiWindowTextGUI textGui = createGuiOn(screen);
TextGraphics textGraphics = screen.newTextGraphics();

// What you need, but don't get
TextGUIGraphics graphics = null;  // WARNING: There is no method to get the graphics object from!

// Then
renderer.drawComponent( graphics, progressBar );

​。请参阅 tutorial 3

而且似乎既没有构造函数,也没有公共方法,它可以让您textguigraphics,请参阅在github repo上进行搜索

而是考虑使用premprybar之类的组件。

使用组件

组件。因此,您可以将其简单地添加到您的textgui中:

final Window window = new BasicWindow("My Root Window");  // create window
window.setComponent(progressBar);  // set component of window

textGUI.addWindowAndWait(window);  // add window to gui

请参阅用于使用组件。

Assume you wanted to draw a progress-bar on the screen somehow.

Issue

But gui.getScreen().newTextGraphics() is giving TextGraphics and not desired TextGUIGraphics.

Draw on the screen

Given your renderer, you can use it to draw the progressBar on your screen.

Therefore, use the renderer's method drawComponent(TextGUIGraphics graphics, ProgressBar component):

// Given
MultiWindowTextGUI textGui = createGuiOn(screen);
TextGraphics textGraphics = screen.newTextGraphics();

// What you need, but don't get
TextGUIGraphics graphics = null;  // WARNING: There is no method to get the graphics object from!

// Then
renderer.drawComponent( graphics, progressBar );

The drawing is a low-level rendering action. See Tutorial 3.

And there seems neither a constructor, nor a public method, that gives you that TextGUIGraphics, see the search on the GitHub repo.

Instead consider to work with components like ProgressBar.

Work with components

ProgressBar is a component. So you can add it simply to your TextGUI:

final Window window = new BasicWindow("My Root Window");  // create window
window.setComponent(progressBar);  // set component of window

textGUI.addWindowAndWait(window);  // add window to gui

See Tutorial 4 for working with components.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文