0

イベント委任モデルによると、私は 1 つのハンドラー クラスを取得しました。

package simple;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ButtonHandler implements ActionListener {

    MainFrame frame;

    public ButtonHandler(MainFrame frame) {
        this.frame = frame;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        MyThread thread = new MyThread(frame);
        Thread mthread = new Thread(thread);            
        mthread.start();
    }    
}

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、、、、

フレーム作成用の 1 つの MainFrame クラス

package simple;

import java.awt.Graphics;    
import javax.swing.JButton;
import javax.swing.JFrame;

@SuppressWarnings("serial")
public class MainFrame extends JFrame {
    JButton btnStart = new JButton("Start");
    int xPos1,xPos2;    
    public MainFrame()
    {           
        setSize(700, 600);
        setLayout(null);
        setVisible(true);           
        xPos1=10;
        xPos2=600;
        btnStart.setBounds(590, 30, 100, 30);
        add(btnStart);
        btnStart.addActionListener(new ButtonHandler(this));            
        paint(null);            
        setDefaultCloseOperation(EXIT_ON_CLOSE);            
    }

    @Override
    public void paint(Graphics g) {
        g.drawString("Seed", xPos1, 50);
        g.drawString("Infotech", xPos2, 550);
    }
}

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

実行可能なインターフェースを実装する 1 つのスレッド クラス

package simple;

public class MyThread implements Runnable {

    MainFrame frame;        

    public MyThread(MainFrame frame) {
        super();
        this.frame = frame;
    }

    @Override
    public void run() {

        while(true)
        {
            frame.repaint();
            try {
                frame.xPos1++;
                frame.xPos2--;
                Thread.sleep(10);
            } catch (InterruptedException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }               
        }
    }    
}

/////////////////////////////////////////////// //////////// と、メイン メソッドだけの 1 つのクラス

package simple;

public class Test {

    public static void main(String[] args) {
        new MainFrame();
    }
}

私がJavaプログラミングの概念に慣れていないという点で、何が問題なのか誰にもわかりますか。

4

1 に答える 1

1
  1. paint最上位コンテナのオーバーライド( JFrame)
  2. 通話していないsuper.paint(g);
  3. 通話中paint(null)
  4. setLayout(null)

カスタム ペイントの実行コンテナー内のコンポーネントのレイアウトを見てスターを付けましょう

を使用する代わりに、 の方が便利なThread場合があります。詳細については、Swing での同時実行javax.swing.Timerをご覧ください。

于 2013-10-16T19:39:06.050 に答える