java组件不能正常显示 我做了个GUI的程序,为什么第一次运行时只看到框架,还要最小化到任务栏,再恢复时才能看到框架里的其它组件(控件)呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;import java.net.*;public class Transmitter { String dictateString = ""; int r = 0, i=0; Random ran = new Random(); TextField dictateText = new TextField(dictateString); //指令文本 //Label dictateText = new Label(dictateString); InetAddress myIP = null; public Transmitter(){ JFrame fr = new JFrame("按键准确度测试-服务器端"); fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fr.setSize(600,400); fr.setLocation(100,100); fr.setVisible(true); fr.setResizable(false); Container ct = fr.getContentPane(); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints gridbagC = new GridBagConstraints(); ct.setLayout(gridbag); gridbagC.insets = new Insets(2,5,2,5); // 说明标签 gridbagC.gridx = 1; gridbagC.gridy = 1; gridbagC.gridwidth = 2; gridbagC.gridheight = 1; gridbagC.anchor = GridBagConstraints.SOUTHWEST; gridbagC.fill = GridBagConstraints.HORIZONTAL; Label instructionLabel = new Label("服务器端说明:"); gridbag.setConstraints(instructionLabel, gridbagC); ct.add(instructionLabel); // 说明内容 gridbagC.gridx = 1; gridbagC.gridy = 2; gridbagC.gridwidth = 4; gridbagC.gridheight = 2; gridbagC.anchor = GridBagConstraints.CENTER; gridbagC.fill = GridBagConstraints.BOTH; Label instructionText = new Label("本程序测试您的按键准确度,服务器端" + "发送20个随机指令:上、下、左、右,并以end结束。"); gridbag.setConstraints(instructionText, gridbagC); ct.add(instructionText); // 指令按钮 gridbagC.gridx = 1; gridbagC.gridy = 4; gridbagC.gridwidth = 1; gridbagC.gridheight = 1; gridbagC.anchor = GridBagConstraints.SOUTHWEST; gridbagC.fill = GridBagConstraints.WEST; Button dictateButton = new Button("生成随机指令"); gridbag.setConstraints(dictateButton, gridbagC); ct.add(dictateButton); // 指令提示标签 gridbagC.gridx = 2; gridbagC.gridy = 4; gridbagC.gridwidth = 1; gridbagC.gridheight = 1; gridbagC.anchor = GridBagConstraints.SOUTHWEST; gridbagC.fill = GridBagConstraints.HORIZONTAL; Label insAdviceLabel = new Label("(请按键生成随机指令)"); gridbag.setConstraints(insAdviceLabel, gridbagC); ct.add(insAdviceLabel); // 指令生成 // 在方法 dictateButton_action() 中 // 指令显示 gridbagC.gridx = 1; gridbagC.gridy = 5; gridbagC.gridwidth = 4; gridbagC.gridheight = 1; gridbagC.anchor = GridBagConstraints.WEST; gridbagC.fill = GridBagConstraints.BOTH; //TextField dictateText = new TextField(dictateString); dictateText.setSize(100, 20); //dictateText.setSize(400, 100); gridbag.setConstraints(dictateText, gridbagC); ct.add(dictateText); // 指令按钮事件监听 dictateButton.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ dictateButton_action(e); dictateText.setText(dictateString); } } ); // 客户端IP标签 gridbagC.gridx = 1; gridbagC.gridy = 6; gridbagC.gridwidth = 2; gridbagC.gridheight = 1; gridbagC.anchor = GridBagConstraints.SOUTHWEST; gridbagC.fill = GridBagConstraints.BOTH; Label ipLabel = new Label("请输入客户端IP地址(默认为本机IP):"); gridbag.setConstraints(ipLabel, gridbagC); ct.add(ipLabel); // IP文本框 gridbagC.gridx = 1; gridbagC.gridy = 7; gridbagC.gridwidth = 4; gridbagC.gridheight = 1; gridbagC.anchor = GridBagConstraints.CENTER; gridbagC.fill = GridBagConstraints.BOTH; getLocalIP(); TextField ipText = new TextField(myIP.toString()); gridbag.setConstraints(ipText, gridbagC); ct.add(ipText); // IP文本 事件监听/* ipText.addTextListener( new TextListener(){ public void actionPerformed(ActionEvent e){ dictateButton_action(e); dictateText.setText(dictateString); } } );*/ // 发送指令 按钮 gridbagC.gridx = 1; gridbagC.gridy = 8; gridbagC.gridwidth = 2; gridbagC.gridheight = 1; gridbagC.anchor = GridBagConstraints.SOUTHWEST; gridbagC.fill = GridBagConstraints.WEST; Button sendButton = new Button("发送指令"); gridbag.setConstraints(sendButton, gridbagC); ct.add(sendButton); } // 方法 : 按钮事件动作 - 指令生成 void dictateButton_action(ActionEvent e){ dictateString = ""; for(i=0;i<19;i++){ r = ran.nextInt(4); switch(r){ case 0 : dictateString += "上"; break; case 1 : dictateString += "下"; break; case 2 : dictateString += "左"; break; case 3 : dictateString += "右"; break; } } dictateString += "end"; } // 方法 :获取本机IP地址 void getLocalIP(){ try{ myIP = InetAddress.getLocalHost(); } catch(UnknownHostException e ){} } public static void main(String[] args){ Transmitter transmitter = new Transmitter(); }} 上面贴出了现在做了的部分,大概写了三分之一了。我用的是netbeans 的IDE,运行时不能正常显示,但是最小化后,再还原就能正常显示了。第一次做这种东西,感觉awt和swing是一头雾水多谢了~ 我运行了,直接就能正常显示啊。不过显示之后会看到组件被重新布局(组件在窗体上迅速移动位置),然后一闪而过。解决的方法是把 fr.setVisible(true);挪到构造方法的最后就好了,一般来说应该把组件安装好再显示窗体,你的那个显示不正常的问题可能也是这个原因。 想问下整形数组和Object之间的问题! java记事本中的简单明了的查找和替换功能代码,给个参考,up有分,附上代码 请教高手问题:在java中,我想调用windows的拷贝命令,怎么去调用啊。 JB2005与JB9哪个好用点啊 使用JDBC访问Mysql数据库的问题。 怎样把登录界面做在最顶层? 高分求救,分不够再加(Debug问题) 请教大哥一个弱智问题,用jsp做客户端,servlet做服务器端 谁能给我一个Together 6.1的注册机 关于java程序和http 大家帮帮忙 Iterator 怎么 转换成LIST
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.net.*;public class Transmitter { String dictateString = "";
int r = 0, i=0;
Random ran = new Random();
TextField dictateText = new TextField(dictateString); //指令文本
//Label dictateText = new Label(dictateString);
InetAddress myIP = null;
public Transmitter(){ JFrame fr = new JFrame("按键准确度测试-服务器端");
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.setSize(600,400);
fr.setLocation(100,100);
fr.setVisible(true);
fr.setResizable(false); Container ct = fr.getContentPane();
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints gridbagC = new GridBagConstraints();
ct.setLayout(gridbag);
gridbagC.insets = new Insets(2,5,2,5); // 说明标签
gridbagC.gridx = 1;
gridbagC.gridy = 1;
gridbagC.gridwidth = 2;
gridbagC.gridheight = 1;
gridbagC.anchor = GridBagConstraints.SOUTHWEST;
gridbagC.fill = GridBagConstraints.HORIZONTAL;
Label instructionLabel = new Label("服务器端说明:");
gridbag.setConstraints(instructionLabel, gridbagC);
ct.add(instructionLabel); // 说明内容
gridbagC.gridx = 1;
gridbagC.gridy = 2;
gridbagC.gridwidth = 4;
gridbagC.gridheight = 2;
gridbagC.anchor = GridBagConstraints.CENTER;
gridbagC.fill = GridBagConstraints.BOTH;
Label instructionText = new Label("本程序测试您的按键准确度,服务器端" +
"发送20个随机指令:上、下、左、右,并以end结束。");
gridbag.setConstraints(instructionText, gridbagC);
ct.add(instructionText); // 指令按钮
gridbagC.gridx = 1;
gridbagC.gridy = 4;
gridbagC.gridwidth = 1;
gridbagC.gridheight = 1;
gridbagC.anchor = GridBagConstraints.SOUTHWEST;
gridbagC.fill = GridBagConstraints.WEST;
Button dictateButton = new Button("生成随机指令");
gridbag.setConstraints(dictateButton, gridbagC);
ct.add(dictateButton); // 指令提示标签
gridbagC.gridx = 2;
gridbagC.gridy = 4;
gridbagC.gridwidth = 1;
gridbagC.gridheight = 1;
gridbagC.anchor = GridBagConstraints.SOUTHWEST;
gridbagC.fill = GridBagConstraints.HORIZONTAL;
Label insAdviceLabel = new Label("(请按键生成随机指令)");
gridbag.setConstraints(insAdviceLabel, gridbagC);
ct.add(insAdviceLabel); // 指令生成
// 在方法 dictateButton_action() 中 // 指令显示
gridbagC.gridx = 1;
gridbagC.gridy = 5;
gridbagC.gridwidth = 4;
gridbagC.gridheight = 1;
gridbagC.anchor = GridBagConstraints.WEST;
gridbagC.fill = GridBagConstraints.BOTH;
//TextField dictateText = new TextField(dictateString);
dictateText.setSize(100, 20);
//dictateText.setSize(400, 100);
gridbag.setConstraints(dictateText, gridbagC);
ct.add(dictateText); // 指令按钮事件监听
dictateButton.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
dictateButton_action(e);
dictateText.setText(dictateString);
}
}
); // 客户端IP标签
gridbagC.gridx = 1;
gridbagC.gridy = 6;
gridbagC.gridwidth = 2;
gridbagC.gridheight = 1;
gridbagC.anchor = GridBagConstraints.SOUTHWEST;
gridbagC.fill = GridBagConstraints.BOTH;
Label ipLabel = new Label("请输入客户端IP地址(默认为本机IP):");
gridbag.setConstraints(ipLabel, gridbagC);
ct.add(ipLabel); // IP文本框
gridbagC.gridx = 1;
gridbagC.gridy = 7;
gridbagC.gridwidth = 4;
gridbagC.gridheight = 1;
gridbagC.anchor = GridBagConstraints.CENTER;
gridbagC.fill = GridBagConstraints.BOTH;
getLocalIP();
TextField ipText = new TextField(myIP.toString());
gridbag.setConstraints(ipText, gridbagC);
ct.add(ipText); // IP文本 事件监听
/*
ipText.addTextListener(
new TextListener(){
public void actionPerformed(ActionEvent e){
dictateButton_action(e);
dictateText.setText(dictateString);
}
}
);
*/
// 发送指令 按钮
gridbagC.gridx = 1;
gridbagC.gridy = 8;
gridbagC.gridwidth = 2;
gridbagC.gridheight = 1;
gridbagC.anchor = GridBagConstraints.SOUTHWEST;
gridbagC.fill = GridBagConstraints.WEST;
Button sendButton = new Button("发送指令");
gridbag.setConstraints(sendButton, gridbagC);
ct.add(sendButton); } // 方法 : 按钮事件动作 - 指令生成
void dictateButton_action(ActionEvent e){
dictateString = "";
for(i=0;i<19;i++){
r = ran.nextInt(4);
switch(r){
case 0 : dictateString += "上"; break;
case 1 : dictateString += "下"; break;
case 2 : dictateString += "左"; break;
case 3 : dictateString += "右"; break;
}
}
dictateString += "end";
} // 方法 :获取本机IP地址
void getLocalIP(){
try{
myIP = InetAddress.getLocalHost();
}
catch(UnknownHostException e ){}
} public static void main(String[] args){
Transmitter transmitter = new Transmitter();
}
}
我用的是netbeans 的IDE,运行时不能正常显示,但是最小化后,再还原就能正常显示了。第一次做这种东西,感觉awt和swing是一头雾水
多谢了~
不过显示之后会看到组件被重新布局(组件在窗体上迅速移动位置),然后一闪而过。
解决的方法是把 fr.setVisible(true);挪到构造方法的最后就好了,一般来说应该把组件安装好再显示窗体,你的那个显示不正常的问题可能也是这个原因。