sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-12-02 13:10:56 28 4
mua khóa gpt4 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);
}
}

Cảm ơn

1 Câu trả lời

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

nhập mô tả hình ảnh ở đây

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().
  • Gọi setVisible(true) 作为该方法中执行的最后一件事。

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

28 4 0
Bài viết được đề xuất: java - 用java构建二叉搜索树
Bài viết được đề xuất: SSDP协议(protocol)-实现
Bài viết được đề xuất: asp.net-mvc - 为什么这两个 API 方法会产生冲突
Bài viết được đề xuất: javascript - Java 小程序未显示在 Web 浏览器上
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com