だから私はJSplitPaneと2つのJPanelを持っています.1つは上に、もう1つは下にあります。両方のパネルで、paintComponent メソッドをオーバーライドし、独自のグラフィックを追加しました。下のパネルでは、アニメーションを追加したいと考えていました。パネルが再描画されない場合は問題ありませんが、タイマー (javax.swing.Timer) が再描画の呼び出しを開始するとすぐに、下部パネルが上部パネルの外観を模倣し、不具合が発生します。実際のアニメーションは更新されませんが、追加され続けます (動くオブジェクトではなく、ドラッグされた絵筆のように)。
Bottom Panel クラスのコードは次のとおりです。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JPanel;
import javax.swing.Timer;
public class WaitControls extends JPanel {
private int pos;
public WaitControls(){
setBackground(Color.gray);
pos = 0;
}
public void progress(){
//animation timer:
Timer timer = new Timer(30, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
pos++;
repaint();
}
});
timer.start();
}
@Override
public void paintComponent(Graphics g){
g.fillRect(pos, pos, 10, 20);
}
}
Splitpane クラスのコードは次のとおりです。
//my classes (imported packages)
import rcc.controls.ControlPanel;
import rcc.controls.InitControls;
import rcc.controls.WaitControls;
import rcc.video.Screen;
import javax.swing.JSplitPane;
public class MainPanel extends JSplitPane{
public RCC rcc;
public Screen screen;
private int height;
public ControlPanel curPanel;
public MainPanel(RCC rcc, Screen screen, int height){
super(JSplitPane.VERTICAL_SPLIT);
this.rcc = rcc;
this.screen = screen;
this.height = height;
setDividerSize(2);
setEnabled(false);
setTopComponent(screen);
setToInitControls();
}
//sets the control panel to init controls ***WORKS FINE***
public void setToInitControls(){
InitControls initCtrls = new InitControls(this);
setBottomComponent(initCtrls);
curPanel = initCtrls;
setDividerLocation(height / 4 * 3);
}
//sets the control panel to wait controls (trying to connect) ***GLITCHES***
public void setToWaitControls(){
WaitControls waitCtrls = new WaitControls();
setBottomComponent(waitCtrls);
curPanel = waitCtrls;
setDividerLocation(height / 4 * 3);
waitCtrls.progress();
}
}
トップパネルは少し複雑です。これには、マウス アクション (MouseEntered リスナーを含む) が含まれ、ユーザーのマウス入力と対話するためにアニメーション化されます。奇妙なことに、アニメーションとタイマーを使用するスワップアウトされた別の下部パネルがあり、この不具合はありません。
これを引き起こした可能性のあるアイデアはありますか?お世話になりました!