1

过去几天一直在尝试手动编写 GUI,并且遇到了一个非常基本的问题。我有一个 JFrame 作为主窗口,他们试图在其中添加 JPanel 以及其中的其他组件。这些作品单独工作,但在将它们添加在一起时遇到问题。在代码中,问题在于将工具栏添加到 JPanel,然后将两者组合到 JFrame。在构建工具栏( http://docs.oracle.com/javase/tutorial/uiswing/components/toolbar.html )时遵循 oracles 示例,但我认为问题在于我如何将它添加到框架或一般方法将组件添加到 JPanel,然后添加到 Frame。下面的代码......任何想法

框架类

import javax.swing.*;
import java.awt.*;

public class frmMainMenu {
    public static void main(String main[]){
        //Create Frame
        JFrame frmMainMenu = new JFrame();

        //Size Frame
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int Width = screenSize.width;
        int Height = screenSize.height;

        frmMainMenu.setSize(Width,Height);

        //Add Components
        comLeftToolBar obj1 = new comLeftToolBar();
        frmMainMenu.add(obj1);

        //Display Frame
        frmMainMenu.setVisible(true);
    }
}

工具栏类

import java.awt.*;
import javax.swing.*;

public class comLeftToolBar extends JFrame{
    //Create ToolBar
    public void comCreateNavBar() {
        JToolBar comNavToolBar = new JToolBar();
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int Height = screenSize.height;
        comNavToolBar.setSize(50, Height - 100);
        comNavButtons(comNavToolBar);

    }
    //Create Buttons
    public void comNavButtons(JToolBar comNavToolBar) {
        JButton comNavButton = new JButton();
        JButton comProButton = new JButton();

        comNavToolBar.add(comNavButton);
        comNavToolBar.add(comProButton);
    }
    //Create Navigation Bar
    public void comLeftNavBar() {
        JPanel comNavBar = new JPanel();
        comNavBar.add(new comLeftToolBar());

    }
}

感谢大家的指导,不胜感激

4

2 回答 2

2

该代码中存在多个问题,这向我表明您正在尝试“魔术编程”。那是行不通的。您需要点击教程并阅读 JavaDocs 才能有机会制作一个工作的 GUI。此代码编译、运行并显示工具栏,但仍远非理想。

import javax.swing.*;
import java.awt.*;

public class FrmMainMenu {
    public static void main(String main[]){
        //Create Frame
        JFrame frmMainMenu = new JFrame();

        //Size Frame
        frmMainMenu.setExtendedState(JFrame.MAXIMIZED_BOTH);

        //Add Components
        comLeftToolBar obj1 = new comLeftToolBar();
        obj1.comCreateNavBar();
        frmMainMenu.add(obj1);

        frmMainMenu.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        //Display Frame
        frmMainMenu.setVisible(true);
    }
}

class comLeftToolBar extends JPanel{

    //Create ToolBar
    public void comCreateNavBar() {
        setLayout(new BorderLayout());
        JToolBar comNavToolBar = new JToolBar();
        comNavButtons(comNavToolBar);

        add(comNavToolBar, BorderLayout.PAGE_START);
    }

    //Create Buttons
    public void comNavButtons(JToolBar comNavToolBar) {
        JButton comNavButton = new JButton("Nav");
        JButton comProButton = new JButton("Pro");

        comNavToolBar.add(comNavButton);
        comNavToolBar.add(comProButton);
    }

    //Create Navigation Bar
    public void comLeftNavBar() {
        JPanel comNavBar = new JPanel();
        comNavBar.add(new comLeftToolBar());
    }
}

其他提示

  1. 应在 EDT(事件调度线程)上创建和更改 Swing GUI。有关更多详细信息,请参阅Swing 中的并发。
  2. Java GUI 可能必须在多个平台、不同的屏幕分辨率和使用不同的 PLAF 上工作。因此,它们不利于组件的精确放置。要组织强大的 GUI 组件,请改用布局管理器或它们的组合,以及用于空白空间的布局填充和边框。
于 2013-06-12T16:02:20.473 回答
0

如果问题是什么都没有出现,那么我认为你setContentPane()在那里缺少一个。尝试

frmMainMenu.setContentPane(comLeftToolBar);

在执行之前frmMainMenu.setVisible();

于 2013-06-12T04:55:01.323 回答