1

これが私の状況です。タイマーがあり、値が特定のポイントに達するまでバックグラウンドで値を更新します。

しかし、値の各更新を確認するには、現在「new ListWindow();」に追加する必要があります。私のforループのステートメント。

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
/**
 * Write a description of class Timing here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Timing
{

/**
 * Constructor for objects of class Timing
 */
public static void Timer()
  {
    Timer timer = new Timer(250, new TimerListener());
    timer.start();
  }

private static class TimerListener implements ActionListener
  {
    public void actionPerformed(ActionEvent e)
    {
        while(valX != 100)
        {
            Timer();
            MainProg.valX += 5;   
            // new ListWindow(); //statement goes here. it creates a new window
                                 //each time it updates the value.
        }
    }
  }
}

私の問題は、新しいウィンドウが欲しくないということです。値の取得元のリスト (以下を参照) で値を更新し、現在のウィンドウのリストを更新します。おそらくボタンクリックで。

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Component.*;

/**
 * Write a description of class ListWindow here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class ListWindow extends JFrame
{
    private    JPanel StatsPanel; //holds stats
    private    JPanel ButtonPanel; //holds stats
    private    JList StatList; //inventory

    private    JButton RefreshButton; // a button

    private    String[] Stats = 
               {"Stuff " + Stuff, "Value " + valX, "Test " + per};

/**
 * Constructor 
 */
public ListWindow()
{
    setTitle("STATS");

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    setLayout(new BorderLayout());

    buildStatsPanel();
    buildButtonPanel();
    RefreshButton.addActionListener(new ButtonListener());
    add(StatsPanel, BorderLayout.CENTER);
    add(ButtonPanel, BorderLayout.SOUTH);

    pack();
    setVisible(true);
}

public    void buildStatsPanel()
{
    StatsPanel = new JPanel();

    StatList = new JList(Stats);

    StatList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);



    StatsPanel.add(StatList);
}

public    void buildButtonPanel()
{
    ButtonPanel = new JPanel();

    RefreshButton = new JButton("Refresh");

    ButtonPanel.add(RefreshButton);

}
private    class ButtonListener
implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        String actionCommand = e.getActionCommand();
        if(actionCommand.equals("Refresh"))
        {
            pack();
            invalidate();
            validate();
        }
    }
}

public    void RunMain(String[] args)
{
    new ListWindow();
}

}

また、これは私が実行する主な方法です。ここに貼り付けた他の 2 つのスニペットにも main メソッドがあることに注意してください。これを行ったのは、迅速なデバッグと将来の使用のために個別に実行できるようにするためです。

/**
 * Write a description of class MainProg here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class MainProg
{
public static int stuff = 100;
public static int valX = 0;
public static int per = 100;    
/**
 * Constructor for objects of class Game
 */
public static void main()
{
  new MoveWindow();
  new ListWindow();
  while (valX != 100)
  {
      Timing.Timer();
    }
}
}

私はJavaが初めてで、他の解決策を探しましたが、必要だと思うものを見つけることができませんでした。おそらく私はそれを見つけましたが、それを解決策として認識していませんでした。

事前に感謝します。

4

1 に答える 1

0

新しい値でリストを更新する関数を呼び出します ( JList ListModelObject 配列を提供するときに使用されるデフォルトはかなり柔軟性がなく、デフォルトではなく別のものを使用する必要がある場合がありListModelます)。

于 2012-12-09T20:57:28.200 に答える