gpt4 book ai didi

java - 如何调整 JFrame 的大小并使用按钮显示 JPanel 和/或其控件?

转载 作者:行者123 更新时间:2023-12-02 02:34:51 24 4
gpt4 key购买 nike

我制作了如下所示的简单表格:

如何使“显示详细信息”按钮显示附加面板和表单,如下所示:

当再次单击该按钮时,它会隐藏控件和面板。

最佳答案

显示/隐藏详细信息面板后,必须调用pack()来调整框架大小。和 setLocationRelativeTo() 分别正确定位自身。

这是一个例子

Main.java

import javax.swing.*;

public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new MainFrame("Test Frame").setVisible(true));
}
}

MainFrame.java

import javax.swing.*;
import java.awt.*;

public class MainFrame extends JFrame {

private DetailsPanel detailsPanel;

public MainFrame(String title) throws HeadlessException {
super(title);
createGUI();
}

private void createGUI() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setLayout(new BorderLayout());

detailsPanel = new DetailsPanel();

add(new MainPanel(this), BorderLayout.CENTER);
add(detailsPanel, BorderLayout.LINE_END);

pack();
setLocationRelativeTo(null);
}

public void showDetails(boolean show) {
detailsPanel.setVisible(show);

pack();
setLocationRelativeTo(null);
}
}

MainPanel.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;

public class MainPanel extends JPanel {

private MainFrame owner;
private JButton showDetailsButton;

private boolean details = false;

public MainPanel(MainFrame owner) {
super();
this.owner = owner;

createGUI();
}

private void createGUI() {
showDetailsButton = new JButton("Details >>>");
showDetailsButton.addActionListener(this::showDetais);

JPanel contentPanel = new JPanel();
contentPanel.setPreferredSize(new Dimension(400, 400));
contentPanel.setBackground(Color.CYAN);

JPanel buttonsPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
buttonsPanel.add(showDetailsButton);

setLayout(new BorderLayout());
setPreferredSize(new Dimension(400, 400));
setMinimumSize(getPreferredSize());


add(contentPanel, BorderLayout.CENTER);
add(buttonsPanel, BorderLayout.PAGE_END);
}

private void showDetais(ActionEvent event) {
showDetailsButton.setText(details ? "Details >>>" : "<<< Details");

details = !details;
owner.showDetails(details);
}
}

DetailsPanel.java

import javax.swing.*;
import java.awt.*;

public class DetailsPanel extends JPanel {

public DetailsPanel() {
super();
createGUI();
}

private void createGUI() {
setBackground(Color.BLUE);
setPreferredSize(new Dimension(200, 800));
setVisible(false);
}
}

关于java - 如何调整 JFrame 的大小并使用按钮显示 JPanel 和/或其控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46539338/

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