gpt4 book ai didi

java - 使用另一个 jPanel 上的按钮修改 jPanel

转载 作者:行者123 更新时间:2023-12-02 13:10:56 28 4
gpt4 key购买 nike

我刚刚接触 Java,正在为我的大学类(class)开发一个项目。我正在开发一款《百万富翁》游戏,但我陷入困境。

我有一个 JFrame 类,其中有 2 个面板。第一个是由按钮组成的,第二个是我想通过按下按钮来更改的面板。按钮有自己的类及其构造函数,面板也是如此,因为它们有不同的布局。我需要在按钮类中创建一个方法,以从框架中删除第二个面板并添加第三个面板(在另一个 JPanel 类中进行了描述)。因此,从技术上讲,我需要从按钮类方法访问 JFrame 类构造函数。有办法做到吗?

我已经有了我的第一个 Panel 类和带有 ClickListener 方法的 Button 类。现在我需要知道如何修改 Button 方法中的 JFrame 类,以在单击时关闭第一个面板,并在同一位置打开另一个面板。

按钮方法

public class ClickListenerD1 implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
buttonPressed();
}

private void buttonPressed()
{
JPanel panel3 = new Domanda1();
}
}

JFrame主类

package nuovaPartita;

import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
* Visualizza la finestra di gioco.
*/
public class NuovaPartitaViewer extends JFrame
{
private static final int FRAME_LUNGH = 1600;
private static final int FRAME_ALT = 900;

JPanel panel1 = new NuovaPartitaComp1();
JPanel panel2 = new Start();
/**
* Costruisce una finestra di gioco su cui vengono visualizzati due
pannelli.
*/
public NuovaPartitaViewer()
{
setSize(FRAME_LUNGH, FRAME_ALT);
setTitle("CHI VUOL ESSER MILIONARIO?");
setVisible(true);
setLocationRelativeTo(null);
setResizable(false);

BorderLayout layout = new BorderLayout();
getContentPane().setLayout(layout);
getContentPane().setBackground(Color.BLACK);
add(panel1, BorderLayout.WEST);
add(panel2, BorderLayout.CENTER);
}
}

谢谢

最佳答案

您只需在按钮的 Action 监听器中设置与按钮对应的面板即可。

enter image description here

public class NuovaPartitaViewer extends JFrame {

public NuovaPartitaViewer() {
JPanel p1 = new JPanel();
p1.add(new JLabel("Panel 1"));
JPanel p2 = new JPanel();
p2.add(new JLabel("Panel 2"));
JPanel p3 = new JPanel();
p3.add(new JLabel("Panel 3"));
JPanel p4 = new JPanel();
p4.add(new JLabel("Panel 4"));

JButton b1 = new JButton("Button 1");
b1.addActionListener(e -> setPanel(p1));
JButton b2 = new JButton("Button 2");
b2.addActionListener(e -> setPanel(p2));
JButton b3 = new JButton("Button 3");
b3.addActionListener(e -> setPanel(p3));
JButton b4 = new JButton("Button 4");
b4.addActionListener(e -> setPanel(p4));

JPanel buttonsPanel = new JPanel(new GridLayout(2, 2));
buttonsPanel.add(b1);
buttonsPanel.add(b2);
buttonsPanel.add(b3);
buttonsPanel.add(b4);

BorderLayout layout = new BorderLayout();
getContentPane().setLayout(layout);
getContentPane().setBackground(Color.BLACK);
add(buttonsPanel, BorderLayout.WEST);
add(p1, BorderLayout.CENTER);

setTitle("CHI VUOL ESSER MILIONARIO?");
pack();
setLocationRelativeTo(null);
setResizable(false);
setVisible(true);
}

private void setPanel(JPanel p) {
add(p, BorderLayout.CENTER);
revalidate();
}

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new NuovaPartitaViewer());
}
}

如果您的所有按钮都是自定义的(扩展 JButton),那么您可以直接在该类中添加操作监听器代码。在构造函数中传递相应的 JPanel,以便您可以在操作监听器中使用它。

另外:

  • 不要设置框架的大小,而是使用 pack()
  • 调用 setVisible(true) 作为该方法中执行的最后一件事。

关于java - 使用另一个 jPanel 上的按钮修改 jPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43965821/

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