为什么显示不出GUI界面?

Quester-King 2012-04-27 01:13:35
比如我用Eclipse运行一个模仿win7系统自带记事本的代码,运行后:


只能把这个界面缩小到任务栏,然后再激活,才会显示所有组件。

对于所有运行的GUI程序都是这种情况,比如我运行一个JDialog,也是这样,不显示任何内容,虽然dialog不能缩小至任务栏再激活,但是点dialog的关闭按钮,它不会关闭,而是显示没有显示的组件,变正常。

这是怎么回事呢??

我是新手,请大家指导一下,谢谢!
...全文
699 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Quester-King 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

贴出你的代码,好像要刷新的,好久没有搞Swing了,用下这个方法试试validate();
[/Quote]
在别人的电脑上都能一次性正常显示,就是我的不行。我卸载了jre又重新安装,还是那样。我不使用eclipse而用命令行编译过后,在执行,依旧是那样。抓狂了!
Quester-King 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

贴出你的代码,好像要刷新的,好久没有搞Swing了,用下这个方法试试validate();
[/Quote]
import java.awt.Font;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

import javax.swing.*;

public class NotepadFrame extends JFrame {
private JMenuBar menuBar;
private JTextArea textArea;
private JScrollPane scrollPane;
private Font font = getFont();

NotepadFrame() {
initFrame();
}

private void initText() {
textArea = new JTextArea();
textArea.setFont(new Font("宋体", Font.PLAIN, 25));
scrollPane = new JScrollPane(textArea);
scrollPane
.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
getContentPane().add(scrollPane);

}

private void initBar() {
menuBar = new MyMenuBar();
this.setJMenuBar(menuBar);
}

private void initFrame() {
setSize(830, 600);
setTitle("记事本");
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
initBar();
initText();
}

public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception ex) {
ex.printStackTrace();
}
new NotepadFrame();
}

private class MyMenuBar extends JMenuBar {
private JMenu fileMenu;
private JMenu editMenu;
private JMenu formatMenu;
private JMenu viewMenu;
private JMenu helpMenu;
private JMenuItem newFile = new JMenuItem("新建(N) Ctrl+N",
KeyEvent.VK_N);
private JMenuItem open = new JMenuItem("打开(O)... Ctrl+O",
KeyEvent.VK_O);
private JMenuItem save = new JMenuItem("保存(S) Ctrl+S",
KeyEvent.VK_S);
private JMenuItem aSave = new JMenuItem("另存为(A)...", KeyEvent.VK_A);
private JMenuItem uSetup = new JMenuItem("页面设置(U)...", KeyEvent.VK_U);
private JMenuItem print = new JMenuItem("打印(P)... Ctrl+P",
KeyEvent.VK_P);
private JMenuItem exit = new JMenuItem("退出(X)", KeyEvent.VK_X);
private JMenuItem backout = new JMenuItem(
"撤销(U) Ctrl+Z", KeyEvent.VK_U);
private JMenuItem shear = new JMenuItem("剪切(T) Ctrl+X",
KeyEvent.VK_T);
private JMenuItem copy = new JMenuItem("复制(C) Ctrl+C",
KeyEvent.VK_C);
private JMenuItem paste = new JMenuItem("粘贴(P) Ctrl+V",
KeyEvent.VK_P);
private JMenuItem delete = new JMenuItem(
"删除(L) Del", KeyEvent.VK_D);
private JMenuItem find = new JMenuItem("查找(F) Ctrl+F",
KeyEvent.VK_F);
private JMenuItem nextFind = new JMenuItem("查找下一个(N) F3",
KeyEvent.VK_N);
private JMenuItem replace = new JMenuItem(
"替换(R)... Ctrl+H", KeyEvent.VK_R);
private JMenuItem goTo = new JMenuItem("转到(G)... Ctrl+G",
KeyEvent.VK_G);
private JMenuItem allChoose = new JMenuItem(
"全选(A) Ctrl+A", KeyEvent.VK_A);
private JMenuItem date = new JMenuItem("日期/时间(D) F5",
KeyEvent.VK_D);
private JMenuItem wrap = new JCheckBoxMenuItem("自动换行(W) ");
private JMenuItem font = new JMenuItem("字体(F)... ", KeyEvent.VK_F);
private JMenuItem status = new JMenuItem("状态栏(S) ", KeyEvent.VK_S);
private JMenuItem help = new JMenuItem("查看帮助(H) ", KeyEvent.VK_H);
private JMenuItem about = new JMenuItem("关于记事本(A) ", KeyEvent.VK_A);
private ActionListener fileListener = new FileMenuListener();
private ActionListener formatListener = new FormatListener();
boolean ifWrap = false;


MyMenuBar() {
initMenu();
addActionListener();
this.add(fileMenu);
this.add(editMenu);
this.add(formatMenu);
this.add(viewMenu);
this.add(helpMenu);
}

private void addActionListener() {
newFile.addActionListener(fileListener);
open.addActionListener(fileListener);
save.addActionListener(fileListener);
wrap.addActionListener(formatListener);
font.addActionListener(formatListener);
}

private void initMenu() {
Insets margin = new Insets(1, 3, 1, 3);
fileMenu = new JMenu("文件(F)");
editMenu = new JMenu("编辑(E)");
formatMenu = new JMenu("格式(O)");
viewMenu = new JMenu("查看(V)");
helpMenu = new JMenu("帮助(H)");
fileMenu.setMargin(margin);
editMenu.setMargin(margin);
formatMenu.setMargin(margin);
viewMenu.setMargin(margin);
helpMenu.setMargin(margin);
fileMenu.add(newFile);
fileMenu.add(open);
fileMenu.add(save);
fileMenu.add(aSave);
fileMenu.addSeparator();
fileMenu.add(uSetup);
fileMenu.add(print);
fileMenu.addSeparator();
fileMenu.add(exit);
editMenu.add(backout);
editMenu.addSeparator();
editMenu.add(shear);
editMenu.add(copy);
editMenu.add(paste);
editMenu.add(delete);
editMenu.addSeparator();
editMenu.add(find);
editMenu.add(nextFind);
editMenu.add(replace);
editMenu.add(goTo);
editMenu.addSeparator();
editMenu.add(allChoose);
editMenu.add(date);
formatMenu.add(wrap);
formatMenu.add(font);
viewMenu.add(status);
helpMenu.add(help);
helpMenu.addSeparator();
helpMenu.add(about);
}

private class FileMenuListener implements ActionListener {

public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == open) {
open(textArea);
} else if (ae.getSource() == save) {
save(textArea);
}
}

/* 打开 */
public void open(JTextArea area) {
JFileChooser fileChooser = new JFileChooser(
new File("").getAbsolutePath());

if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {

String path = fileChooser.getSelectedFile()
.getAbsolutePath();
BufferedReader bufferedR = null;
String line;

try {
bufferedR = new BufferedReader(new FileReader(path));
line = bufferedR.readLine();
while (line != null) {
area.append(line + "\n");
line = bufferedR.readLine();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bufferedR.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

/* 保存 */
public void save(JTextArea area) {
JFileChooser fileChooser = new JFileChooser(
new File("").getAbsolutePath());

if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {

String path = fileChooser.getSelectedFile()
.getAbsolutePath();
PrintWriter printW = null;
String[] content;
content = area.getText().split("\n");
try {
printW = new PrintWriter(new FileWriter(path));
for (int i = 0; i < content.length; i++) {
printW.println(content[i]);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
printW.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}

private class FormatListener implements ActionListener {
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == wrap) {
textArea.setLineWrap(ifWrap = (!ifWrap));
}else if(ae.getSource() == font){
new FontDialog(NotepadFrame.this,true).setVisible(true);
}
}
}
}

}

import java.awt.Container;
import java.awt.Frame;
import java.awt.GraphicsEnvironment;

import javax.swing.*;
import javax.swing.event.*;

public class FontDialog extends JDialog {
private JLabel fontLabel = new JLabel("字体(F)");
private JTextField fontTextField = new JTextField();
private Container contentPane = getContentPane();
private JScrollPane fontScrollPane = new JScrollPane();
private GraphicsEnvironment graEnviro = GraphicsEnvironment
.getLocalGraphicsEnvironment();
private String[] fontNames = graEnviro.getAvailableFontFamilyNames();
private JList fontList = new JList(fontNames);

public FontDialog(JFrame f,boolean m) {
super(f,m);
this.setSize(400, 500);
this.setVisible(true);
this.setLayout(null);
// this.setDefaultCloseOperation(EXIT_ON_CLOSE);
init();
}

private void init() {
fontLabel.setSize(160, 25);
fontLabel.setLocation(10, 10);
contentPane.add(fontLabel);
fontTextField.setSize(160, 25);
fontTextField.setLocation(10, 35);
contentPane.add(fontTextField);
fontScrollPane.setSize(160, 120);
fontScrollPane.setLocation(10, 60);
contentPane.add(fontScrollPane);
fontScrollPane.setViewportView(fontList);
fontScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER );
fontList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
fontList.addListSelectionListener(new ListSelectionListener(){
public void valueChanged(ListSelectionEvent event){
String s = (String)fontList.getSelectedValue();
fontTextField.setText(s);
}
});
}

public static void main(String[] args) {
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(Exception e){
e.printStackTrace();
}
}

}
古市轩 2012-04-27
  • 打赏
  • 举报
回复
贴出你的代码,好像要刷新的,好久没有搞Swing了,用下这个方法试试validate();
Quester-King 2012-04-27
  • 打赏
  • 举报
回复
有没有懂的,愿意说一下啊~~谢谢~~~~~~~~~~
自己顶一个

58,454

社区成员

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

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