gpt4 book ai didi

Java GUI - JPanel、JFrame、JButton

转载 作者:行者123 更新时间:2023-12-02 20:56:04 30 4
gpt4 key购买 nike

我正在尝试打开一个其中同时包含图像按钮的窗口。但我似乎不知道如何添加按钮。图像显示良好,菜单工作正常,但无论我在何处添加按钮(添加到 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com