查看: 1105|回复: 6
|
有关JAVA GUI。。
[复制链接]
|
|
请问。。如何令我的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()...不过我不会用@@
谢谢各位解答~ |
|
|
|
|
|
|
|
发表于 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。 |
|
|
|
|
|
|
|
发表于 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();
}
}
}
初来报道请多指教。。。 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|