java-JavaJFrame窗口中组件显示问题

问题描述

JavaJFrame窗口中组件显示问题

我在JFrame中添加了菜单栏并为菜单项添加事件(在窗口中添加一个JComponent),但是窗口中不显示!
代码如下:
package frame;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;

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

public class Main
{

public static void main(String[] args) {
    // TODO Auto-generated method stub
    EventQueue.invokeLater(new Runnable()
    {
        public void run()
        {
            MenuFrame frame = new MenuFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    });
}

}

class MenuFrame extends JFrame{

public MenuFrame()
{
    setTitle("TraPre");
    setBounds(200, 90, DEFAULT_WIDTH, DEFAULT_HEIGHT);

// setLayout(null);

    JMenu fileMenu = new JMenu("File");

    // demonstrates accelerators
    JMenuItem openItem = fileMenu.add(new TestAction("Open"));
    openItem.setAccelerator(KeyStroke.getKeyStroke("ctrl O"));

    fileMenu.addSeparator();

    JMenu SaveMenu = new JMenu("Save ");
    final JMenuItem SaveTraItem = new JMenuItem("Save Tra");
    SaveTraItem.setAccelerator(KeyStroke.getKeyStroke("ctrl T"));
    SaveMenu.add(SaveTraItem);
    final JMenuItem SaveEnItem = new JMenuItem("Save En");
    SaveEnItem.setAccelerator(KeyStroke.getKeyStroke("ctrl E"));
    SaveMenu.add(SaveEnItem);
    fileMenu.add(SaveMenu);

    fileMenu.add(new AbstractAction("Exit")
    {
        public void actionPerformed(ActionEvent event)
        {
            System.exit(0);
        }
    });

    fileMenu.addMenuListener(new MenuListener()
    {
        public void menuSelected(MenuEvent event)
        {
            SaveTraItem.setEnabled(false);
            SaveEnItem.setEnabled(false);
        }

        public void menuDeselected(MenuEvent event)
        {}

        public void menuCanceled(MenuEvent event)
        {}
    });

    // demonstrate icon
    Action cutAction = new TestAction("Cut");
    cutAction.putValue(Action.SMALL_ICON, new ImageIcon("cn.gif"));
    Action copyAction = new TestAction("Copy");
    copyAction.putValue(Action.SMALL_ICON, new ImageIcon("nz.gif"));
    Action pasteAction = new TestAction("Paste");
    pasteAction.putValue(Action.SMALL_ICON, new ImageIcon("gi.gif"));

    JMenu DrawMenu = new JMenu("画网格");
    DrawMenu.add(new DrawGridAction("Input Para"));

// JMenuItem ParaItem = new JMenuItem("输入参数");
// ParaItem.addActionListener(new ActionListener()
// {
// public void actionPerformed(ActionEvent event)
// {
// JComponent drawgrid = new DrawComponent();
// panel1.add(drawgrid);
// JButton button = new JButton();
// add(button, BorderLayout.NORTH);
// validate();
// }
// });
// ParaItem.addActionListener(new DrawGridAction());
// DrawMenu.add(ParaItem);

    JMenu ImportDataMenu = new JMenu("导入数据");
    JMenuItem SqlTraItem = new JMenuItem("从SQL导入原始记录");
    JMenuItem TxtEnItem = new JMenuItem("从TXT导入轨迹序列");
    ImportDataMenu.add(SqlTraItem);
    ImportDataMenu.add(TxtEnItem);

    JMenu GenerateTraMenu = new JMenu("生成轨迹");

    JMenu ComputEnMenu = new JMenu("熵值计算");
    JMenuItem AllTraItem = new JMenuItem("计算所有轨迹熵值");
    JMenuItem OneTraItem = new JMenuItem("计算一条轨迹的不同时间段的熵值");
    JMenuItem SomeTimeItem = new JMenuItem("计算所有轨迹不同时间段的熵值");
    ComputEnMenu.add(AllTraItem);
    ComputEnMenu.add(SomeTimeItem);
    ComputEnMenu.add(OneTraItem);

    JMenu TraPreMenu = new JMenu("轨迹预测");

    // demonstrate mnemonics
    JMenu helpMenu = new JMenu("Help");
    helpMenu.setMnemonic('H');

    JMenuItem indexItem = new JMenuItem("Index");
    indexItem.setMnemonic('I');
    helpMenu.add(indexItem);

    // you can also add the mnemonic key to an action
    Action aboutAction = new TestAction("About");
    aboutAction.putValue(Action.MNEMONIC_KEY, new Integer('A'));
    helpMenu.add(aboutAction);

    // add all top-level menus to menu bar
    JMenuBar menuBar = new JMenuBar();
    setJMenuBar(menuBar);

    menuBar.add(fileMenu);
    menuBar.add(DrawMenu);
    menuBar.add(ImportDataMenu);
    menuBar.add(GenerateTraMenu);
    menuBar.add(ComputEnMenu);
    menuBar.add(TraPreMenu);
    menuBar.add(helpMenu);

    // demonstrate pop-ups
    popup = new JPopupMenu();
    popup.add(cutAction);
    popup.add(copyAction);
    popup.add(pasteAction);

    JPanel panel = new JPanel();
    panel.setComponentPopupMenu(popup);
    add(panel);

    // the following line is a workaround for bug 4966109
    panel.addMouseListener(new MouseAdapter(){});

// DrawComponent drawgrid = new DrawComponent();
// add(drawgrid);
}

public static final int DEFAULT_WIDTH = 900;
public static final int DEFAULT_HEIGHT = 600;

private JPopupMenu popup;

// private DrawComponent drawgrid;

class TestAction extends AbstractAction
{
    public TestAction(String name)
    {
        super(name);
    }

    public void actionPerformed(ActionEvent event)
    {
        System.out.println(getValue(Action.NAME) + " selected.");
    }
}

class DrawGridAction extends AbstractAction{

    public DrawGridAction(String name)
    {
        super(name);
    }

    public void actionPerformed(ActionEvent event)
    {
        JButton button = new JButton();
        add(button, BorderLayout.SOUTH);
        JComponent drawgrid = new DrawComponent();
        getContentPane().add(drawgrid);
        validate();
        setVisible(true);
        System.out.println(getValue(Action.NAME) + " selected.");
    }
}

}

时间: 2024-09-21 07:54:38

java-JavaJFrame窗口中组件显示问题的相关文章

在Word2003文档窗口中改变显示比例

  在Word2003文档窗口中查看Word文档时,用户可以按照某种比例放大或者缩小显示比例.放大显示比例时,用户可以看到比较清楚的Word文档内容,但是相对看到的内容会减少,这种显示通常用于修改细节数据或编辑较小的字体.相反,如果缩小显示比例时,可以观察到的Word2003文档内容数量很多,但是文档的内容就看得不清晰,这通常是用于整页快速的浏览或者排版时观察整个页面. 用户可以在Word2003文档窗口单击"常用"工具栏中"显示比例"组合框右边的下拉三角按钮,出现

javascript 弹出窗口中是否显示地址栏的实现代码_javascript技巧

Question : 在IE 7中弹出页面后,总是会显示地址栏,而该地址栏是不希望在程序中出现的,况且也影响美观.而在IE6中就不会出现地址栏. Solution: 工具-->Internet 选项-->安全-->自定义级别-->允许网站打开没有地址栏或状态栏的窗口-->允许 这样设置了IE7后就不会在弹出窗口中出现地址栏了.IE7以及后续版本默认不可以打开不带地址栏的窗口,这样是为了安全起见. javascript的window.open也可以用来弹出新页面,而且通过设置参

visual basic 窗口中如何显示PDF文档,或WORD文档?

问题描述 想做一个资料管理程序,自动显示PDF或WORD文档 解决方案 解决方案二:应该是使用不同的控件来进行切换显示.解决方案三:word用WebBrowser控件可以pdf没弄过,不知道行不?解决方案四:该回复于2012-04-19 15:49:01被版主删除解决方案五:试下AutoVueXControl

java-Java调用含窗口的OCX显示在Java的窗体中

问题描述 Java调用含窗口的OCX显示在Java的窗体中 现在遇到的情况是:有个带窗口的OCX提供一些接口给Java程序调用,需求是在Java实现的窗口调用某个接口的时候,就呈现OCX里某一个窗口,已知这个OCX窗口不是弹出框,需要有个父窗口进行承载 问题来了:接口调用成功,可是窗口并没有出现,接口的返回值是正常的,但是该弹出来的窗口没有弹出 解决方案 Java调用ocx控件以及dlljava项目中ocx控件的调用 解决方案二: 仍然是没用过的工具.不过猜测是不是没有调用"显示方法"

关于用java做一个显示在窗口中的名字作战。

问题描述 学java没多久对GUI不是很了解.如果想将信息输出在窗口中要用什么函数来实现啊~我只知道一个g.drawString("Missilescount:"+f1.attack(),a,b);可以将每个人伤血和受攻击的信息输出到窗口中,但是由于attack的返回类型是void不可以这么弄如果写成String类型我也不知道到返回什么?如果我的思路不对,谁能给个大体思路啊~还有具体该用什么函数谢谢~

请问C#在通过命令行调用另一个程序的时候,如何让另一个程序的输出信息在新窗口中显示

问题描述 情况是这样的,我用C++写了一个程序,可以在黑窗口显示信息并且可以运行完,然后我用命令行调用C++生成的.exe文件的时候也能够运行结束并且显示信息,但是当我用C#调用的时候,C++程序始终在运行不结束,于是我就想用黑窗口看信息,结果始终看不到信息,不知道应该怎么写,而且由于程序始终在运行,我也无法在其运行结束后获取信息输出,所以我现在完全不知道问题出在哪里,所以还是想用黑窗口看一下信息,我现在的代码是下面这样的,想问问应该怎么改能看到信息Processp=newProcess();p

在eclipse的console栏中一直显示java.io.IOException

在eclipse的console栏中一直显示java.io.IOException: 您的主机中的软件中止了一个已建立错误.具体如下. [2013-09-02 17:24:14 - ddmlib] 您的主机中的软件中止了一个已建立的连接. java.io.IOException: 您的主机中的软件中止了一个已建立的连接. at sun.nio.ch.SocketDispatcher.write0(Native Method) at sun.nio.ch.SocketDispatcher.writ

怎么显示Word2013窗口中的审阅

  显示Word2013窗口中的审阅的方法: 第1步,打开Word2013文档窗口,依次单击"文件"→"选项"命令,如图2013041501所示. 第2步,在打开的"Word选项"对话框中,单击左侧的"自定义功能区"按钮,如图2013041502所示. 3第3步,打开"自定义功能区"选项卡,在右侧的"自定义功能区"列表"主选项卡"区域选中 "审阅"

界面-如何使打开的其他程序或者文档在MFC窗口中显示,而不是新打开一个窗口

问题描述 如何使打开的其他程序或者文档在MFC窗口中显示,而不是新打开一个窗口 我想在程序界面中指定一个区域,用于显示被打开的其他程序或者文档的界面.可是我用ShellExecute函数打开指定的那个文档和程序的时候,总是会再启动另一个窗口,效果就像是直接点击打开那个文件一样. 解决方案 将mfc窗口设置为其它程序的父窗口 解决方案二: 参考:程序只允许打开唯一实例且所有关联文档都在同一实例内打开的一揽子解决办法http://blog.csdn.net/IfI/article/details/1