java组件不能正常显示

rabbitjerry 2009-06-06 09:20:17
我做了个GUI的程序,为什么第一次运行时只看到框架,还要最小化到任务栏,再恢复时才能看到框架里的其它组件(控件)呢?
...全文
140 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
black_night 2009-06-07
  • 打赏
  • 举报
回复
试试this.validate();
rabbitjerry 2009-06-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lasfrost 的回复:]
我运行了,直接就能正常显示啊。
不过显示之后会看到组件被重新布局(组件在窗体上迅速移动位置),然后一闪而过。
解决的方法是把 fr.setVisible(true);挪到构造方法的最后就好了,一般来说应该把组件安装好再显示窗体,你的那个显示不正常的问题可能也是这个原因。
[/Quote]

太感谢了!
lasfrost 2009-06-07
  • 打赏
  • 举报
回复
我运行了,直接就能正常显示啊。
不过显示之后会看到组件被重新布局(组件在窗体上迅速移动位置),然后一闪而过。
解决的方法是把 fr.setVisible(true);挪到构造方法的最后就好了,一般来说应该把组件安装好再显示窗体,你的那个显示不正常的问题可能也是这个原因。
rabbitjerry 2009-06-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lasfrost 的回复:]
源码长吗?能贴出来吗
[/Quote]
上面贴出了现在做了的部分,大概写了三分之一了。
我用的是netbeans 的IDE,运行时不能正常显示,但是最小化后,再还原就能正常显示了。

第一次做这种东西,感觉awt和swing是一头雾水。。。
多谢了~
rabbitjerry 2009-06-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lasfrost 的回复:]
源码长吗?能贴出来吗
[/Quote]

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();
}
}

  • 打赏
  • 举报
回复
需要pack();
lasfrost 2009-06-06
  • 打赏
  • 举报
回复
源码长吗?能贴出来吗

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧