繁体   English   中英

Java GUI - JPanels,JFrames,JButtons

[英]Java GUI - JPanels, JFrames, JButtons

我正在尝试打开一个同时包含imagebuttons的窗口。 但我似乎无法弄清楚如何添加按钮。 图像显示很好,菜单工作正常,但无论我在哪里添加按钮(进入JLabelJPanelJFrame ),它都没有显示...

主要:

public static void main(String[] args) {
    GUI myGUI = new GUI();
    myGUI.show();
}

GUI类:使用菜单时调用openImage。 然后显示图像,但没有按钮。

private JFrame myFrame;
private JPanel myPanel;
private JLabel myLabel;
public GUI()
{
    myFrame = new JFrame();
    initializePanel();
}

public void show()
{
    myFrame.setSize(600,600);
    myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    myFrame.addMouseListener(this);

    setupMenu(myFrame);     

    myFrame.setVisible(true);
}
private void initializePanel() 
{
       myPanel = new JPanel();
       myPanel.setPreferredSize(new Dimension(500,500));
       //myPanel.setLayout(new BorderLayout());
}
private void openImage(String fileName)
{
    try {
        myImage = ImageIO.read(new File(fileName));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }    

    myLabel = getJLabel();

    JButton button = new JButton("ButtonClick");
        button.addActionListener(this);

    myFrame.setContentPane(myLabel);

    myPanel.add(button);
    myFrame.getContentPane().add(myPanel);

    myFrame.pack();
    myFrame.setSize(600,600);
}
private void setupMenu(JFrame window) {
        JMenuBar menubar = new JMenuBar();
        JMenu file = new JMenu("File");
        JMenuItem open = new JMenuItem("Open");
        open.addActionListener(this);
        file.add(open);
        menubar.add(file);
        window.setJMenuBar(menubar);
}

您的主要问题是您将contentPane设置为JLabel - 请勿执行此操作! contentPane需要是不透明的,需要构建为容易用作Container,在你的情况下,真的应该是JPanel。 JLabel我相信使用null布局,所以你的代码没有按钮就不足为奇了。 如果要显示背景图像,请使用扩展JPanel的匿名类构造myPanel,覆盖此类中的paintComponent方法(在方法中首先调用super.paintComonent),然后在此方法中绘制图像。 然后,您可以将组件添加到contentPane,现在将使用FlowLayout(JPanel的默认值),默认情况下它将是不透明的。

此外,如果您的目标是交换GUI中显示的项目,请使用CardLayout为您进行交换,因为此布局使交换组件变得轻而易举。

真的不知道,取决于你如何将图片添加到JLabel, JPanel, or JFrame ,但也许对于包含少数的simle容器,只有一两个JComponents有疯狂的想法,没有副作用,想要显示图片并添加JButton:

JLabel非常类似于JPanel的 JComponent ,默认是半透明且非常简单的实现Icon / ImageIcon ,那么你只需要调用myLabel.setIcon(myPicture)

对于所有JComponents,您可以通过使用一些LayoutManager (Box,Flow,GridBagLayout)来添加另一个JComponent

您试图将标签设置为内容窗格,然后尝试将面板添加到该图像,而该图像根本不会生成。

更改它,以便将标签添加到面板并将面板作为内容窗格:

像这样:

证据

你有这条线就是问题所在。 它没有多大意义:

myFrame.setContentPane(myLabel);

尝试改为:

myFrame.getContentPane().add(myLabel); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM