Java GUI - JPanel、JFrame、JButton

标签 java image swing jframe jpanel

我正在尝试打开一个其中同时包含图像按钮的窗口。但我似乎不知道如何添加按钮。图像显示良好,菜单工作正常,但无论我在何处添加按钮(添加到 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 需要是不透明的,需要构建为易于用作容器,并且在您的情况下,实际上应该是 JPanel。我相信 JLabel 使用空布局,因此您的代码不显示按钮也就不足为奇了。如果要显示背景图像,请从扩展 JPanel 的匿名类构造 myPanel,重写该类中的 PaintComponent 方法(在该方法中首先调用 super.paintComonent),并在此方法中绘制图像。然后,您可以将组件添加到 contentPane,该 contentPane 现在将使用 FlowLayout(JPanel 的默认设置),并且默认情况下它将是不透明的。

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

关于Java GUI - JPanel、JFrame、JButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7464567/

相关文章:

java - "Cannot find symbol: method damage(int)"

java - 如何在java swing中打印保存的电子表格?

css - 如何将多个图像添加到 css 标题?

java - Swing Pin 中网格单元的颜色渐变动画

java - 设置 JButton 图标时出现许多不熟悉的错误

java - 如果不能使用通配符,如何列出几种对象?

java - Spring Boot 中 Grails 的 BootStrap#init 等效项?

java - 以字符串形式从文本文件返回值

javascript - 使用 CSS 和/或 JS 动态裁剪(或屏蔽?)所有图像到最短图像的高度?

php - PHP-如何将数据发送到另一个PHP-SQL页面并在同一页面上接收图表图像