Hey,
ich progge grad ein bissl rum und probiere das SwingUtilities aus, wie es mein Info-Lehrer zeigte. Normalerweise müsste das anonyme Runnable-Objekt parallel zur GUI laufen. Tut es aber nicht. Die GUI friert trotzdem ein und die Befehle werden klassisch nacheinander abgearbeitet:
Mein Code:
Der interessante Teil steht in der inneren Klasse Bl, welches einen ActionListener implementiert.
Zunächst sollte der Hintergrund des einen Buttons dunkel rot und nach 3 Sekunden orange werden.
Bei mir friert die GUI für 3 Sekunden ein und das Button wird gleich orange (optisch).
Ich hoffe jemand kann mir so bald wie möglich helfen.
Gruß firebird
ich progge grad ein bissl rum und probiere das SwingUtilities aus, wie es mein Info-Lehrer zeigte. Normalerweise müsste das anonyme Runnable-Objekt parallel zur GUI laufen. Tut es aber nicht. Die GUI friert trotzdem ein und die Befehle werden klassisch nacheinander abgearbeitet:
Mein Code:
Code:
import javax.swing.*; import java.awt.*; // Graphics import java.awt.event.*; public class BFCompiler extends JApplet{ private JTextField txt; private JButton btn; private JButton[] btnarr; private JLabel anflbl; private JLabel mitlbl; private JLabel endlbl; private JTextArea txtarea; private JScrollPane sp; private BFMachine bfm = new BFMachine(); private String bftxt = ""; private Runnable showInter; public void init() { erzeugeKomponenten(); registriereZuhoerer(); baueLayout(); } private void erzeugeKomponenten(){ txt = new JTextField("++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.", 20);; btn = new JButton("Interpretieren"); btnarr = new JButton[1]; btnarr[0] = new JButton("0"); anflbl = new JLabel("Anfang"); mitlbl = new JLabel("Mitte"); endlbl = new JLabel("Ende"); txtarea = new JTextArea(""); sp = new JScrollPane(txtarea); } private void registriereZuhoerer(){ btn.addActionListener(new BL()); } private int getLength(){ int with = 1; int max = 1; for(int i=0; i<bftxt.length(); i++){ switch(bftxt.charAt(i)){ case '>': with++; break; case '<': with--; break; } if(with>max){max=with;} } return max; } private void baueLayout(){ Container cp = getContentPane(); cp.removeAll(); cp.setLayout(new BorderLayout()); JPanel pN = new JPanel(new FlowLayout()); pN.add(txt); pN.add(btn); cp.add(pN, BorderLayout.NORTH); JPanel pC = new JPanel(new BorderLayout()); btnarr = new JButton[getLength()]; for(int i=0; i<btnarr.length; i++){ btnarr[i] = new JButton("0"); } JPanel pCN = new JPanel(new GridLayout(2, 1)); JPanel pB = new JPanel(new GridLayout(1, btnarr.length)); for(int i=0; i<btnarr.length; i++){ pB.add(btnarr[i]); } pCN.add(pB); JPanel pL = new JPanel(new FlowLayout()); pL.add(anflbl); pL.add(mitlbl); pL.add(endlbl); pCN.add(pL); pC.add(pCN, BorderLayout.NORTH); pC.add(sp, BorderLayout.CENTER); cp.add(pC, BorderLayout.CENTER); } public class BL implements ActionListener{ public void actionPerformed(ActionEvent e){ bftxt = txt.getText(); Runnable showInter = new Runnable(){ public void run(){ try{ btnarr[0].setBackground(new Color(128, 0, 0)); Thread.sleep(3000); btnarr[0].setBackground(new Color(255, 128, 0)); }catch(InterruptedException ie){ System.out.println(ie); } } }; SwingUtilities.invokeLater(showInter); } } public static void main(String[] args){ BFCompiler dasApplet= new BFCompiler(); JFrame meinFrame= new JFrame("Brainfuck"); meinFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); meinFrame.getContentPane().add(dasApplet, BorderLayout.CENTER); dasApplet.init(); dasApplet.start(); meinFrame.setSize(600, 500); meinFrame.setVisible(true); } }
Zunächst sollte der Hintergrund des einen Buttons dunkel rot und nach 3 Sekunden orange werden.
Bei mir friert die GUI für 3 Sekunden ein und das Button wird gleich orange (optisch).
Ich hoffe jemand kann mir so bald wie möglich helfen.
Gruß firebird
Comment