Board logo

標題: 移動標籤 (二) - 使用執行緒 [打印本頁]

作者: 周政輝    時間: 2018-5-19 11:57     標題: 移動標籤 (二) - 使用執行緒

使用執行緒,改寫 移動標籤 (一) 的程式碼,使標籤移動順暢。

[attach]4120[/attach]
作者: 蔡季樺    時間: 2018-5-19 12:03

本帖最後由 蔡季樺 於 2018-5-26 09:46 編輯
  1. import java.awt.BorderLayout;
  2. import java.awt.EventQueue;

  3. import javax.swing.JFrame;
  4. import javax.swing.JPanel;
  5. import javax.swing.border.EmptyBorder;
  6. import javax.swing.JLabel;
  7. import javax.swing.ImageIcon;
  8. import java.awt.event.KeyAdapter;
  9. import java.awt.event.KeyEvent;


  10. public class Main2 extends JFrame {

  11.         private JPanel contentPane;
  12.         private int x=150,y=150;
  13.         private JLabel label;
  14.         /**
  15.          * Launch the application.
  16.          */
  17.         public static void main(String[] args) {
  18.                 EventQueue.invokeLater(new Runnable() {
  19.                         public void run() {
  20.                                 try {
  21.                                         Main2 frame = new Main2();
  22.                                         frame.setVisible(true);
  23.                                 } catch (Exception e) {
  24.                                         e.printStackTrace();
  25.                                 }
  26.                         }
  27.                 });
  28.         }

  29.         /**
  30.          * Create the frame.
  31.          */
  32.         public Main2() {
  33.                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  34.                 setBounds(100, 100, 450, 300);
  35.                 contentPane = new JPanel();
  36.                 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  37.                 setContentPane(contentPane);
  38.                 contentPane.setLayout(null);
  39.                
  40.                 label = new JLabel("");
  41.                 label.setIcon(new ImageIcon("C:\\Users\\student\\Downloads\\box.png"));
  42.                 label.setBounds(x, y, 45, 40);
  43.                 contentPane.add(label);
  44.                 test();
  45.                
  46.         }
  47.         public void test()
  48.         {
  49.                 Thread t = new Thread()
  50.         {
  51.                         public void run()
  52.                         {
  53.                                 addKeyListener(new KeyAdapter() {
  54.                                         @Override
  55.                                         public void keyPressed(KeyEvent arg0) {
  56.                                                 System.out.println(arg0.getKeyCode() == KeyEvent.VK_UP);
  57.                                                 if(arg0.getKeyCode() == KeyEvent.VK_UP)
  58.                                                 {
  59.                                                         y+=10;
  60.                                                 }if(arg0.getKeyCode() == KeyEvent.VK_DOWN)
  61.                                                 {
  62.                                                         y-=10;
  63.                                                 }if(arg0.getKeyCode() == KeyEvent.VK_LEFT)
  64.                                                 {
  65.                                                         x-=10;
  66.                                                 }if(arg0.getKeyCode() == KeyEvent.VK_RIGHT)
  67.                                                 {
  68.                                                         x+=10;
  69.                                                 }
  70.                                                 label.setLocation(x, y);
  71.                                         }
  72.                                 });
  73.                         }
  74.         };
  75.         }
  76. }
複製代碼

作者: 蔡庭豪    時間: 2018-5-23 18:46

本帖最後由 蔡庭豪 於 2018-5-26 10:53 編輯
  1. package bbs.istak.org.tw;

  2. import java.awt.BorderLayout;
  3. import java.awt.EventQueue;

  4. import javax.swing.JFrame;
  5. import javax.swing.JPanel;
  6. import javax.swing.border.EmptyBorder;
  7. import javax.swing.JLabel;
  8. import javax.swing.ImageIcon;
  9. import java.awt.event.KeyAdapter;
  10. import java.awt.event.KeyEvent;

  11. public class MBS2 extends JFrame {

  12.         private JPanel contentPane;

  13.         /**
  14.          * Launch the application.
  15.          */
  16.         public static void main(String[] args) {
  17.                 EventQueue.invokeLater(new Runnable() {
  18.                         public void run() {
  19.                                 try {
  20.                                         MBS2 frame = new MBS2();
  21.                                         frame.setVisible(true);
  22.                                 } catch (Exception e) {
  23.                                         e.printStackTrace();
  24.                                 }
  25.                         }
  26.                 });
  27.         }

  28.         /**
  29.          * Create the frame.
  30.          */
  31.         public MBS2() {
  32.                
  33.                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  34.                 setBounds(100, 100, 450, 300);
  35.                 contentPane = new JPanel();
  36.                 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  37.                 setContentPane(contentPane);
  38.                 contentPane.setLayout(null);
  39.                
  40.                 JLabel lblNewLabel = new JLabel("New label");
  41.                 lblNewLabel.setIcon(new ImageIcon(MBS2.class.getResource("/bbs/istak/org/tw/box.png")));
  42.                 lblNewLabel.setBounds(10, 10, 50, 50);
  43.                 contentPane.add(lblNewLabel);
  44.                
  45.                 addKeyListener(new KeyAdapter() {
  46.                         @Override
  47.                         public void keyPressed(KeyEvent arg0) {
  48.                                 int x = lblNewLabel.getLocation().x;
  49.                                 int y = lblNewLabel.getLocation().y;
  50.                                 MBS2thread mbs2t = new MBS2thread(x,y,arg0.getKeyCode(),lblNewLabel);
  51.                                
  52.                                  mbs2t.run(x,y,arg0.getKeyCode(),lblNewLabel);
  53.                         }
  54.                 });
  55.                
  56.                
  57.         }
  58. }
複製代碼
  1. package bbs.istak.org.tw;

  2. import java.awt.event.KeyEvent;

  3. import javax.swing.JLabel;

  4. public class MBS2thread {
  5.        
  6.         private int x;
  7.         private int y;
  8.         private int keyCode;
  9.         private JLabel Label;

  10.         public MBS2thread(int x, int y, int keyCode,JLabel Label) {
  11.                 this.x = x;
  12.                 this.y = y;
  13.                 this.keyCode = keyCode;
  14.                 this.Label = Label;
  15.         }

  16.         public void run(int x,int y,int keyCode,JLabel Label){
  17.                
  18.                 if(keyCode == KeyEvent.VK_UP)
  19.                         y-=10;
  20.                 if(keyCode == KeyEvent.VK_DOWN)
  21.                         y+=10;
  22.                 if(keyCode == KeyEvent.VK_RIGHT)
  23.                         x+=10;
  24.                 if(keyCode == KeyEvent.VK_LEFT)
  25.                         x-=10;
  26.                
  27.                 Label.setLocation(x, y);
  28.                
  29.         }
  30.    
  31. }
複製代碼

作者: 張健勳    時間: 2018-5-26 10:32

本帖最後由 張健勳 於 2018-5-26 10:54 編輯
  1. package bbs.istak.org.tw;

  2. import java.awt.BorderLayout;
  3. import java.awt.EventQueue;

  4. import javax.swing.JFrame;
  5. import javax.swing.JPanel;
  6. import javax.swing.border.EmptyBorder;
  7. import javax.swing.JLabel;
  8. import javax.swing.ImageIcon;
  9. import java.awt.event.KeyAdapter;
  10. import java.awt.event.KeyEvent;

  11. public class Main extends JFrame {

  12.         private JPanel contentPane;
  13.         private int x = 100, y = 100;
  14.         private JLabel lb;

  15.         /**
  16.          * Launch the application.
  17.          */
  18.         public static void main(String[] args) {
  19.                 EventQueue.invokeLater(new Runnable() {
  20.                         public void run() {
  21.                                 try {
  22.                                         Main frame = new Main();
  23.                                         frame.setVisible(true);
  24.                                 } catch (Exception e) {
  25.                                         e.printStackTrace();
  26.                                 }
  27.                         }
  28.                 });
  29.         }

  30.         /**
  31.          * Create the frame.
  32.          */
  33.         public Main() {
  34.                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  35.                 setBounds(100, 100, 450, 300);
  36.                 contentPane = new JPanel();
  37.                 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  38.                 setContentPane(contentPane);
  39.                 contentPane.setLayout(null);

  40.                 lb = new JLabel("");
  41.                 lb.setIcon(new ImageIcon(Main.class.getResource("/bbs/istak/org/tw/box.png")));
  42.                 lb.setBounds(x, y, 45, 40);
  43.                 contentPane.add(lb);
  44.                 rL();

  45.         }

  46.         public void rL() {
  47.                 Thread thread = new Thread() {
  48.                         public void run() {
  49.                                 addKeyListener(new KeyAdapter() {
  50.                                         @Override
  51.                                         public void keyPressed(KeyEvent e) {
  52.                                                 System.out.println(e.getKeyCode() == KeyEvent.VK_UP);
  53.                                                  switch(e.getKeyCode())
  54.                                 {
  55.                                 case KeyEvent.VK_UP:
  56.                                         y-=5;break;
  57.                                 case KeyEvent.VK_DOWN:
  58.                                         y+=5;break;
  59.                                 case KeyEvent.VK_LEFT:
  60.                                         x-=5;break;
  61.                                 case KeyEvent.VK_RIGHT:
  62.                                         x+=5;break;
  63.                                 default:
  64.                                         break;
  65.                                 }
  66.                                                 lb.setLocation(x, y);
  67.                                         }
  68.                                 });
  69.                         }
  70.                 };
  71.         }
  72. }
複製代碼

作者: 林侑成    時間: 2018-5-26 10:55

  1. package asdf;
  2. import java.awt.BorderLayout;
  3. import java.awt.EventQueue;
  4. import javax.swing.JFrame;
  5. import javax.swing.JPanel;
  6. import javax.swing.border.EmptyBorder;
  7. import javax.swing.JLabel;
  8. import javax.swing.ImageIcon;
  9. import java.awt.event.KeyAdapter;
  10. import java.awt.event.KeyEvent;
  11. public class QWER extends JFrame {
  12.         private JPanel contentPane;
  13.         private int x=150,y=150;
  14.         private JLabel label;
  15.         public static void main(String[] args) {
  16.                 EventQueue.invokeLater(new Runnable() {
  17.                         public void run() {
  18.                                 try {
  19.                                             QWER frame = new QWER();
  20.                                         frame.setVisible(true);
  21.                                 } catch (Exception e) {
  22.                                         e.printStackTrace();
  23.                                 }
  24.                         }
  25.                 });
  26.         }
  27.         public QWER() {
  28.                 setTitle("\u79FB\u52D5\u6A19\u7C64\u7DF4\u7FD2");
  29.                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  30.                 setBounds(100, 100, 450, 300);
  31.                 contentPane = new JPanel();
  32.                 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  33.                 setContentPane(contentPane);
  34.                 contentPane.setLayout(null);
  35.                
  36.                 label = new JLabel("");
  37.                 label.setIcon(new ImageIcon("C:\\Users\\student\\Downloads\\box.png"));
  38.                 label.setBounds(x, y, 45, 40);
  39.                 contentPane.add(label);
  40.                 test();
  41.                
  42.         }
  43.         public void test()
  44.         {
  45.                 Thread t = new Thread()
  46.                 {
  47.                         public void run()
  48.                         {
  49.                                 addKeyListener(new KeyAdapter() {
  50.                                         @Override
  51.                                         public void keyPressed(KeyEvent arg0) {
  52.                                                 System.out.println(arg0.getKeyCode() == KeyEvent.VK_UP);
  53.                                                 if(arg0.getKeyCode() == KeyEvent.VK_UP)
  54.                                                 {
  55.                                                         y+=10;
  56.                                                 }if(arg0.getKeyCode() == KeyEvent.VK_DOWN)
  57.                                                 {
  58.                                                         y-=10;
  59.                                                 }if(arg0.getKeyCode() == KeyEvent.VK_LEFT)
  60.                                                 {
  61.                                                         x-=10;
  62.                                                 }if(arg0.getKeyCode() == KeyEvent.VK_RIGHT)
  63.                                                 {
  64.                                                         x+=10;
  65.                                                 }
  66.                                                 label.setLocation(x, y);
  67.                                         }
  68.                                 });
  69.                         }
  70.               };
  71.         }
  72. }
複製代碼

作者: 陳泓瑜    時間: 2018-5-26 11:01

  1. package tw.kuas.eu.tw;
  2. import java.awt.BorderLayout;
  3. import java.awt.EventQueue;
  4. import javax.swing.JFrame;
  5. import javax.swing.JPanel;
  6. import javax.swing.border.EmptyBorder;
  7. import javax.swing.JLabel;
  8. import javax.swing.ImageIcon;
  9. import java.awt.event.KeyAdapter;
  10. import java.awt.event.KeyEvent;
  11. public class Main extends JFrame {
  12.         private JPanel contentPane;
  13.         private int x=150,y=150;
  14.         private JLabel label;
  15.         public static void main(String[] args) {
  16.                 EventQueue.invokeLater(new Runnable() {
  17.                         public void run() {
  18.                                 try {
  19.                                             Main frame = new Main();
  20.                                         frame.setVisible(true);
  21.                                 } catch (Exception e) {
  22.                                         e.printStackTrace();
  23.                                 }
  24.                         }
  25.                 });
  26.         }
  27.         public Main() {
  28.                 setTitle("\u79FB\u52D5\u6A19\u7C64\u7DF4\u7FD2");
  29.                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  30.                 setBounds(100, 100, 450, 300);
  31.                 contentPane = new JPanel();
  32.                 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  33.                 setContentPane(contentPane);
  34.                 contentPane.setLayout(null);
  35.                
  36.                 label = new JLabel("");
  37.                 label.setIcon(new ImageIcon(Main.class.getResource("/tw/kuas/eu/tw/box.png")));
  38.                 label.setBounds(150, 128, 54, 62);
  39.                 contentPane.add(label);
  40.                 test();
  41.                
  42.         }
  43.         public void test()
  44.         {
  45.                 Thread t = new Thread()
  46.                 {
  47.                         public void run()
  48.                         {
  49.                                 addKeyListener(new KeyAdapter() {
  50.                                         @Override
  51.                                         public void keyPressed(KeyEvent arg0) {
  52.                                                 System.out.println(arg0.getKeyCode() == KeyEvent.VK_UP);
  53.                                                 if(arg0.getKeyCode() == KeyEvent.VK_UP)
  54.                                                 {
  55.                                                         y+=10;
  56.                                                 }if(arg0.getKeyCode() == KeyEvent.VK_DOWN)
  57.                                                 {
  58.                                                         y-=10;
  59.                                                 }if(arg0.getKeyCode() == KeyEvent.VK_LEFT)
  60.                                                 {
  61.                                                         x-=10;
  62.                                                 }if(arg0.getKeyCode() == KeyEvent.VK_RIGHT)
  63.                                                 {
  64.                                                         x+=10;
  65.                                                 }
  66.                                                 label.setLocation(x, y);
  67.                                         }
  68.                                 });
  69.                         }
  70.               };
  71.         }
  72. }
複製代碼

作者: 黃茂勛    時間: 2018-5-26 11:07

本帖最後由 黃茂勛 於 2018-5-26 11:21 編輯
  1. [code]package bbs.istak.org.tw;

  2. import java.awt.BorderLayout;
  3. import java.awt.EventQueue;

  4. import javax.swing.JFrame;
  5. import javax.swing.JPanel;
  6. import javax.swing.border.EmptyBorder;
  7. import java.awt.Color;
  8. import javax.swing.border.LineBorder;
  9. import java.awt.event.KeyAdapter;
  10. import java.awt.event.KeyEvent;
  11. import javax.swing.JLabel;
  12. import javax.swing.ImageIcon;

  13. public class Main extends JFrame {

  14.         private JPanel contentPane;
  15.         private JLabel lblNewLabel;

  16.         /**
  17.          * Launch the application.
  18.          */
  19.         public static void main(String[] args) {
  20.                 EventQueue.invokeLater(new Runnable() {
  21.                         public void run() {
  22.                                 try {
  23.                                         Main frame = new Main();
  24.                                         frame.setVisible(true);
  25.                                 } catch (Exception e) {
  26.                                         e.printStackTrace();
  27.                                 }
  28.                         }
  29.                 });
  30.         }

  31.         /**
  32.          * Create the frame.
  33.          */
  34.         public Main() {
  35.                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  36.                 setBounds(100, 100, 495, 398);
  37.                 contentPane = new JPanel();
  38.                 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  39.                 setContentPane(contentPane);
  40.                 contentPane.setLayout(null);
  41.                
  42.                 lblNewLabel = new JLabel("");
  43.                 lblNewLabel.setBounds(150, 75, 50, 50);
  44.                 lblNewLabel.setIcon(new ImageIcon(Main.class.getResource("/bbs/istak/org/tw/box.png")));
  45.                 contentPane.add(lblNewLabel);
  46.                 addKeyListener(new KeyAdapter() {
  47.                         @Override
  48.                         public void keyReleased(KeyEvent arg0) {
  49.                                 int x=lblNewLabel.getLocation().x;
  50.                                 int y=lblNewLabel.getLocation().y;
  51.                                 RunPanel rp = new RunPanel(x,y,arg0.getKeyCode(),lblNewLabel);
  52.                                 rp.start();                               
  53.                         }
  54.                 });
  55.                
  56.         }
  57. }
複製代碼
  1. package bbs.istak.org.tw;

  2. import javax.swing.JLabel;
  3. import javax.swing.JPanel;

  4. public class RunPanel extends Thread{

  5.         int x=0,y=0,keycode=0;
  6.         JLabel lblNewLabel = null;
  7.         RunPanel(int x, int y, int keycode, JLabel lblNewLabel)
  8.         {
  9.                 this.x = x;
  10.                 this.y = y;
  11.                 this.keycode = keycode;
  12.             this.lblNewLabel = lblNewLabel;
  13.         }
  14.         public void run()
  15.         {
  16.                 switch(this.keycode)
  17.                 {
  18.                    case 38:
  19.                            y-=5;
  20.                            break;
  21.                    case 40:
  22.                            y+=5;
  23.                            break;
  24.                    case 37:
  25.                            x-=5;
  26.                            break;
  27.                    case 39:
  28.                            x+=5;
  29.                            break;
  30.                default:
  31.                        break;
  32.                 }
  33.                 lblNewLabel.setLocation(this.x, this.y);
  34.         }
  35. }
複製代碼





歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/) Powered by Discuz! 7.2