Hallo Leute,
ich erstelle gerade eine GUI mit Java, und zwar mit drei Buttons Run, Halt und next. Mit Run beginnt der Thread zu laufen und Halt soll suspendiert werden.Beide laufen prima.
NextButton soll die Ausführung des Threads Step by Step durchführen.
Hat jemand eine Idee wie ich -buttonNext.addActionListener- implementieren kann.
Ich danke euch alle im Voraus.
ich erstelle gerade eine GUI mit Java, und zwar mit drei Buttons Run, Halt und next. Mit Run beginnt der Thread zu laufen und Halt soll suspendiert werden.Beide laufen prima.
NextButton soll die Ausführung des Threads Step by Step durchführen.
Hat jemand eine Idee wie ich -buttonNext.addActionListener- implementieren kann.
Ich danke euch alle im Voraus.
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
/** verwende fuer Kommentare hier javadoc
* @author adil
*
*/
public class PanelAnimation extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
int cols ;
Dimension panelAnimation ;
JTextField[] tf;
TextfieldArray vektor ;
JButton buttonNext ,buttonHalt, buttonRun ;
JPanel animationButton ;
JPanel pane;
boolean isFlagStart;
String algorithmus;
Algorithm algorithm;
Thread thread ;
public PanelAnimation(){
thread = null;
isFlagStart = false;
animationButton = new JPanel();
animationButton.setPreferredSize(new Dimension(600,40));
animationButton.setBorder(BorderFactory.createLineBorder(Color.black));
pane = new JPanel();
pane.setPreferredSize(new Dimension(600,470));
pane.setBorder(BorderFactory.createLineBorder(Color.black));
setLayout(new BorderLayout());
this.cols = PanelVektor.cols;
this.tf = new JTextField[cols];
this.vektor = new TextfieldArray(cols);
panelAnimation = new Dimension(600,510);
this.setPreferredSize(panelAnimation);
this.setBorder(BorderFactory.createLineBorder(Color.black));
Dimension buttonDimension = new Dimension(90,20);
buttonNext = new JButton("next");
buttonNext.setPreferredSize(buttonDimension);
buttonHalt = new JButton("halt");
buttonHalt.setPreferredSize(buttonDimension);
buttonRun = new JButton("run");
buttonRun.setPreferredSize(buttonDimension);
buttonRun.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(thread == null){
thread = new Thread()
{ public void run(){
if (Thread.interrupted())
return;
try{
if (StartFenster.animation.get_isFlagStart()){
if(algorithmus == "Bubblesort"){
algorithm = new BubbleSort(algorithmus,tf,pane);
algorithm.sort(tf);
}
else if(algorithmus == "Insertionsort"){
algorithm = new InsertSort(algorithmus,tf,pane);
algorithm.sort(tf);
}
else if(algorithmus == "Selectionsort"){
algorithm = new SelectSort(algorithmus,tf,pane);
algorithm.sort(tf);
}
StartFenster.animation.set_isFlagStart(false);
}
}
catch (Exception ex){
ex.printStackTrace();
}
finally {
thread = null;
}
}
};
thread.start();
}
else resumeNow();
}
});
buttonHalt.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
suspendNow();
}
});
buttonNext.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
}
});
animationButton.add(buttonNext);
animationButton.add(buttonHalt);
animationButton.add(buttonRun);
this.add(animationButton, BorderLayout.SOUTH);
}
@SuppressWarnings("deprecation")
private void suspendNow() {
if (thread != null) { // avoid NullPointerException
thread.suspend();
}
}
@SuppressWarnings("deprecation")
private void resumeNow() {
if (thread != null) { // avoid NullPointerException
thread.resume();
}
}
@SuppressWarnings("deprecation")
public void stopNow(){
if(thread != null){
thread.stop();
}
}
public void setAlgorithmus(String algo){
this.algorithmus = algo;
}
public void set_isFlagStart(boolean isORnot){
this.isFlagStart = isORnot;
}
public boolean get_isFlagStart(){
return isFlagStart;
}
public void remov(){
pane.removeAll();
this.revalidate();
this.repaint();
}
public void ad(){
vektor.setdata(tf);
pane.add(vektor);
this.add(pane , BorderLayout.CENTER);
this.revalidate();
this.repaint();
}
public void setdata(JTextField[] vektorData){
for (int i = 0 ; i<cols ; i++){
tf[i] = new JTextField("",3);
tf[i].setHorizontalAlignment(JTextField.CENTER);
tf[i].setText(vektorData[i].getText());
}
}
}