佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1106|回复: 6

有关JAVA GUI。。

[复制链接]
发表于 21-12-2006 01:22 AM | 显示全部楼层 |阅读模式
请问。。如何令我的PROGRAM 在GUI 接受INPUT 之后 execute actionPerformed()
因为如下面的CODE,他会run 完main 才run actionPerformed()...

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class TestStackGUI{   
       
        public static void main(String[] args){               
                MainMenuGUI abc=new MainMenuGUI();
                abc.CreateGUI();
                System.out.println(abc.getTV());
        }       
}

class MainMenuGUI implements ActionListener{

        JFrame jf;
        private JButton jbtOK = new JButton("OK");
    private JButton jbtExit = new JButton("Exit");
    private JRadioButton radTV1 = new JRadioButton("1. Tv1");
    private JRadioButton radTV2 = new JRadioButton("2. Tv2");

    private int intTV=-1;
   
    public int getTV(){
            return intTV;           
    }
   
    public void CreateGUI(){         
                jf = new JFrame("Choose TV");

            Container c = jf.getContentPane();       
            c.setLayout(new GridLayout(3,2));
            
            c.add(new JLabel("Please select the TV:"));
                c.add(new JLabel(""));
            radTV1.setSelected(true);
            
                ButtonGroup group = new ButtonGroup();
            group.add(radTV1);
            group.add(radTV2);
                                   
            c.add(radTV1);      
            c.add(radTV2);
          
            jbtOK.addActionListener(this);
            jbtExit.addActionListener(this);       
            c.add(jbtOK);
            c.add(jbtExit);
            
            jf.setSize(500,500);
            jf.setVisible(true);
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
       
        public void actionPerformed(ActionEvent e) {
            if(e.getSource()==jbtOK){                   
                if(radTV1.isSelected()){       
                               System.out.println("TV1 selected");
                        intTV=2;       
                }
                else if(radTV2.isSelected()){
                                System.out.println("TV2 selected");
                                intTV=2;
                        }                
                jf.dispose();
            }
            else if(e.getSource()==jbtExit){
               jf.dispose();
            }
        }       
}

是不是要用那个什么 invokelater()...不过我不会用@@
谢谢各位解答~
回复

使用道具 举报


ADVERTISEMENT

发表于 24-12-2006 10:42 PM | 显示全部楼层
我不明白你的问题。
你的 code 里 actionPerformed() 是当 jbtOK 或 jbtExit 被点击了才执行。
点击 JButton 也算 input 吧。
你所谓的 input 是什么呢?

btw, jbtOK 或 jbtExit 被点击了执行 actionPerformed() 是因为以下的 code

jbtOK.addActionListener(this);
jbtExit.addActionListener(this);
回复

使用道具 举报

 楼主| 发表于 24-12-2006 11:09 PM | 显示全部楼层
原帖由 pony 于 24-12-2006 10:42 PM 发表
我不明白你的问题。
你的 code 里 actionPerformed() 是当 jbtOK 或 jbtExit 被点击了才执行。
点击 JButton 也算 input 吧。
你所谓的 input 是什么呢?

btw, jbtOK 或 jbtExit 被点击了执行 actionPerf ...



对不起。。我想我说到很含糊。
我是要那个BUTTON 被点击了之后立刻执行 actionPerformed 里的CODE。
如上面的CODE,我的 RADIO BUTTON 无论select tv1 或tv2,MAIN 里的
”System.out.println(abc.getTV());“ output 都是-1.
然后才RUN actionPerformed 里的 System.out.println("TV? selected";

现在他的顺序是: createGUI()-->USERINPUT(没有理)-->RUN 完MAIN--> RUN actionPerformed().
可不可以

public static void main(String[] args){               
                MainMenuGUI abc=new MainMenuGUI();
                abc.CreateGUI();  <-----在这里HOLD 住,等EVENT OCCUR,RUN了 actionPerformed 才继续?
                System.out.println(abc.getTV());
       }        


顺序应该是:createGUI()-->等USER INPUT-->RUN actionPerformed-->继续 RUN MAIN 剩下的CODE

真的很谢谢您的恢复
回复

使用道具 举报

发表于 24-12-2006 11:29 PM | 显示全部楼层
你可以用JDialog来做你要的东西, 问题是这样写program好象有点怪怪的, 可能你有其它原因吧!

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

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JRadioButton;

public class TestStackGUI {

    public static void main(String[] args) {
        MainMenuGUI abc = new MainMenuGUI();
        abc.CreateGUI();
        System.out.println(abc.getTV());
    }
}

class MainMenuGUI implements ActionListener {
    JDialog jf;

    private JButton jbtOK = new JButton("OK");

    private JButton jbtExit = new JButton("Exit");

    private JRadioButton radTV1 = new JRadioButton("1. Tv1");

    private JRadioButton radTV2 = new JRadioButton("2. Tv2");

    private int intTV = -1;

    public int getTV() {
        return intTV;
    }

    public void CreateGUI() {
        jf = new JDialog();
        jf.setTitle("Choose TV");
        jf.setModal(true);//hold it

        Container c = jf.getContentPane();
        c.setLayout(new GridLayout(3, 2));

        c.add(new JLabel("Please select the TV:"));
        c.add(new JLabel(""));
        radTV1.setSelected(true);

        ButtonGroup group = new ButtonGroup();
        group.add(radTV1);
        group.add(radTV2);

        c.add(radTV1);
        c.add(radTV2);

        jbtOK.addActionListener(this);
        jbtExit.addActionListener(this);
        c.add(jbtOK);
        c.add(jbtExit);

        jf.setSize(500, 500);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == jbtOK) {
            if (radTV1.isSelected()) {
                System.out.println("TV1 selected");
                intTV = 2;
            } else if (radTV2.isSelected()) {
                System.out.println("TV2 selected");
                intTV = 2;
            }
            jf.dispose();
        } else if (e.getSource() == jbtExit) {
            jf.dispose();
        }
    }
}
回复

使用道具 举报

 楼主| 发表于 25-12-2006 02:38 AM | 显示全部楼层
原帖由 黑木头 于 24-12-2006 11:29 PM 发表
你可以用JDialog来做你要的东西, 问题是这样写program好象有点怪怪的, 可能你有其它原因吧!

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.a ...



我这样做会怪吗?因为我为了要比较容易CONTROL PROGRAM的FLOW。
依据USER 的选择还有SUB-MENU,SUB-SUB-MENU..
GOOGLE 了几天我还以为要做MULTITHREADING 的东东 @_@
真的是太谢谢你了~  orz
回复

使用道具 举报

发表于 24-1-2007 09:21 AM | 显示全部楼层
或者 你可以用netBeans 里面的gui builder。
回复

使用道具 举报

Follow Us
发表于 24-1-2007 10:40 AM | 显示全部楼层

回复 #1 taufu 的帖子

试试改成酱:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class TestStackGUI{   
        
        public static void main(String[] args){               
                MainMenuGUI abc=new MainMenuGUI();
                abc.CreateGUI();
                                abc.setVisible(true);
                                while (abc.isVisible()) {
                                        try { Thread.sleep(100); } catch (InterruptedException e) {}
                                }
                System.out.println(abc.getTV());
        }        
}

class MainMenuGUI extends JFrame implements ActionListener {

        JFrame jf;
        private JButton jbtOK = new JButton("OK");
    private JButton jbtExit = new JButton("Exit");
    private JRadioButton radTV1 = new JRadioButton("1. Tv1");
    private JRadioButton radTV2 = new JRadioButton("2. Tv2");

    private int intTV=-1;
   
    public int getTV(){
            return intTV;            
    }
   
    public void CreateGUI(){         
                jf = this;

            Container c = jf.getContentPane();        
            c.setLayout(new GridLayout(3,2));
            
            c.add(new JLabel("Please select the TV:"));
                c.add(new JLabel(""));
            radTV1.setSelected(true);
            
                ButtonGroup group = new ButtonGroup();
            group.add(radTV1);
            group.add(radTV2);
                                   
            c.add(radTV1);      
            c.add(radTV2);
           
            jbtOK.addActionListener(this);
            jbtExit.addActionListener(this);        
            c.add(jbtOK);
            c.add(jbtExit);
            
            jf.setSize(500,500);
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        
        public void actionPerformed(ActionEvent e) {
            if(e.getSource()==jbtOK){                    
                if(radTV1.isSelected()){        
                               System.out.println("TV1 selected");
                        intTV=2;        
                }
                else if(radTV2.isSelected()){
                                System.out.println("TV2 selected");
                                intTV=2;
                        }               
                jf.dispose();
            }
            else if(e.getSource()==jbtExit){
               jf.dispose();
            }
        }        
}

初来报道请多指教。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT


本周最热论坛帖子本周最热论坛帖子

ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 27-8-2025 06:26 AM , Processed in 0.104333 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表