【问题标题】:Objects not displaying in GUI - Java对象未在 GUI 中显示 - Java
【发布时间】:2014-01-24 06:40:54
【问题描述】:

我用 Java 制作了一个简单的 GUI,它包括菜单、上下文菜单、按钮、工具栏、复选框和状态栏。但是,按钮和工具栏未显示。这是代码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.border.EtchedBorder;

public class test extends JFrame {

private JLabel statusbar;
private JPopupMenu menu;
private Toolkit toolkit;

public test() {

    initUI();
}

private void initUI() {

    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    getContentPane().add(panel);
    toolkit = this.getToolkit();
    menu = new JPopupMenu();
    JToolBar toolbar1 = new JToolBar();
    JToolBar toolbar2 = new JToolBar();

    ImageIcon iconNew = new ImageIcon(getClass().getResource("new.png")); // Icons
    ImageIcon iconOpen = new ImageIcon(getClass().getResource("open.png"));
    ImageIcon iconSave = new ImageIcon(getClass().getResource("save.png"));
    ImageIcon iconExit = new ImageIcon(getClass().getResource("exit.png"));

    JButton newb = new JButton(iconNew); // Declaring Buttons for Toolbar
    JButton openb = new JButton(iconOpen);
    JButton saveb = new JButton(iconSave);
    JButton exitb = new JButton(iconExit);

    toolbar1.add(newb); // Adding Buttons to Toolbar1
    toolbar1.add(openb);
    toolbar1.add(saveb);
    toolbar1.setAlignmentX(0); // Alignment of Toolbar1

    toolbar2.add(exitb); // Adding Buttons to Toolbar2
    toolbar2.setAlignmentX(0); // Alignment of Toolbar2

    exitb.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
            System.exit(0);
        }

    });

    panel.add(toolbar1);
    panel.add(toolbar2);

    add(panel, BorderLayout.NORTH);

    JMenuBar menubar = new JMenuBar(); // JMenuBar
    JMenu file = new JMenu("File");
    JMenu view = new JMenu("View");
    file.setMnemonic(KeyEvent.VK_F);

    JMenuItem eMenuItem = new JMenuItem("Exit", iconExit); // Exit Menu Item
    eMenuItem.setMnemonic(KeyEvent.VK_E);
    eMenuItem.setToolTipText("Exit application");
    eMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W,
            ActionEvent.CTRL_MASK));
    eMenuItem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
            System.exit(0);
        }
    });
    JMenuItem nMenuItem = new JMenuItem("New", iconNew); // New Menu Item
    nMenuItem.setToolTipText("New File");
    JMenuItem oMenuItem = new JMenuItem("Open", iconOpen);
    oMenuItem.setToolTipText("Open File");
    JMenuItem sMenuItem = new JMenuItem("Save", iconSave);
    sMenuItem.setToolTipText("Save File");

    JMenu imp = new JMenu("Import..."); // Import Sub-Menu Item
    imp.setMnemonic(KeyEvent.VK_M);
    imp.setToolTipText("Import Data");
    JMenuItem newsf = new JMenuItem("Import newsfeed list...");
    JMenuItem bookm = new JMenuItem("Import bookmarks...");
    JMenuItem mail = new JMenuItem("Import mail...");

    imp.add(newsf); // Adding Sub-menu Items to Menu
    imp.add(bookm);
    imp.add(mail);

    file.add(nMenuItem); // Adding Menu Items to "File" Menu-List
    file.add(oMenuItem);
    file.add(sMenuItem);
    file.addSeparator();
    file.add(imp);
    file.addSeparator();
    file.add(eMenuItem);

    JButton quitButton = new JButton("Quit"); // Quit Button
    quitButton.setBounds(870, 380, 80, 30);
    quitButton.setToolTipText("Press me");
    quitButton.setBackground(new Color(66, 89, 205));
    quitButton.setForeground(new Color(255, 255, 255));
    quitButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent event) {
            System.exit(0);
        }
    });

    JButton nextButton = new JButton("Next >"); // Next Button
    nextButton.setBounds(770, 380, 80, 30);
    nextButton.setToolTipText("Next...");
    nextButton.setBackground(new Color(66, 89, 205));

    nextButton.setForeground(new Color(255, 255, 255));

    nextButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent event) {
            System.exit(0);
        }
    });

    panel.add(quitButton); // Adding Buttons to panel
    panel.add(nextButton);

    JCheckBoxMenuItem sbar = new JCheckBoxMenuItem("Show StatuBar"); // Creating
                                                                        // Status-bar
                                                                        // Check-box
    sbar.setState(true);
    sbar.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
            if (statusbar.isVisible()) {
                statusbar.setVisible(false);
            } else {
                statusbar.setVisible(true);
            }
        }

    });

    view.add(sbar); // Adding Check-box to the View Menu-List

    JMenuItem menuItemBeep = new JMenuItem("Beep"); // Beep option in Pop-Up
    menuItemBeep.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            toolkit.beep();
        }
    });

    menubar.add(file); // Adding Menu-Lists to Menu Bar
    menubar.add(view);

    menu.add(menuItemBeep); // Adding Beep option in Pop-Up

    JMenuItem menuItemClose = new JMenuItem("Close"); // Close option in
                                                        // Pop-Up
    menuItemClose.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            System.exit(0);
        }
    });

    menu.add(menuItemClose); // Adding Close option in Pop-Up

    this.addMouseListener(new MouseAdapter() { // Mouse Listener for Pop-Up
        @Override
        public void mouseReleased(MouseEvent e) {
            if (e.getButton() == MouseEvent.BUTTON3) {
                menu.show(e.getComponent(), e.getX(), e.getY());
            }
        }
    });

    setJMenuBar(menubar); // Menu-bar???

    statusbar = new JLabel(" Statusbar"); // Creating Status Bar
    statusbar.setBorder(BorderFactory
            .createEtchedBorder(EtchedBorder.RAISED));
    add(statusbar, BorderLayout.SOUTH);

    panel.setLayout(null); // Panel Design and additional Arguments
    panel.setBackground(new Color(18, 33, 110));

    this.setTitle("My First GUI in Java");
    this.setSize(1000, 500);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            test ex = new test();
            ex.setVisible(true);
        }
    });
  }
}

我对此很陌生,因此感谢任何 cmets。

谢谢!

【问题讨论】:

  • 您可能不应该扩展 JFrame,而且您似乎添加了两次面板。
  • 你在哪里打电话implements ActionListener
  • 你有一堆组件。哪些不显示?我建议将您的问题归结为SSCCE 并消除所有额外的代码。您似乎还向内容窗格和 JFrame 添加了相同的面板(无论如何,它只是将它传递到内容窗格),这表明您可能希望使用细齿梳来检查您的代码。跨度>

标签: java swing layout awt


【解决方案1】:

“但是,按钮和工具栏没有显示。”

  1. 查看您的init() 方法,我只看到您在框架中添加了两个组件。

    add(panel, BorderLayout.NORTH);
    add(statusbar, BorderLayout.SOUTH);
    
  2. 然后使用与上面相同的面板,将布局设置为 null,当您第一次将其指定为 BoxLayout

    panel.setLayout(null); 
    
  3. 我把上面的代码注释掉,出现了一些组件。

【讨论】:

    【解决方案2】:

    您在开始时设置了两次面板布局:

    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

    然后再一次:

    panel.setLayout(null);

    您应该尝试摆脱第二个。这应该可以解决问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-29
      • 2017-04-22
      • 2022-07-12
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 2016-08-15
      • 2016-08-16
      相关资源
      最近更新 更多