gpt4 book ai didi

java - 如何使用 Swing 在 JFrame 中添加面板

转载 作者:行者123 更新时间:2023-12-01 22:43:41 25 4
gpt4 key购买 nike

使用 Swing 时,组件未显示在我的 JFrame 中。其实我的目标是:

  1. 添加框架
  2. 在框架中添加面板
  3. 面板包含 3 个按钮

但是没有显示。

这是我的代码

public class Panels
{
JFrame frame;
JPanel panel;
private JButton addButton;
private JButton modifyButton;
private JButton deleteButton;

Panels()
{
initGUI();
launchFrame();
}

public void initGUI()
{
frame = new JFrame();
panel = new JPanel();
addButton = new JButton("Add");
modifyButton = new JButton("Modify");
deleteButton = new JButton("Delete");
}

public void launchFrame()
{
addButton.setBounds(130,50,225,25);
addButton.setBounds(150,50,225,25);
addButton.setBounds(170,50,225,25);
addButton.setBounds(190,50,225,25);
panel.add(addButton);
panel.add(modifyButton);
panel.add(deleteButton);
panel.setLayout(null);
panel.setBackground(Color.RED);

frame.add(panel);
frame.setTitle("My Frame with Panel");
frame.setSize(600,400);
frame.setLocationRelativeTo(null);
frame.setLayout(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

这里主要是调用Panels类

当在主功能上运行时,框架显示没有 Controller (即未显示 3 个按钮)

public class Main
{
public static void main(String[] args)
{
Panels obj_panel=new Panels();
}
}

最佳答案

这是主要问题

frame.setLayout(null);

当您将布局设置为 null 时,这意味着它的所有组件必须设置了边界。您尝试添加没有任何边界的面板。您只需设置面板中按钮的边界。如果删除上面的行,它就可以工作。

我真正关注的其他问题:

  • 根本不要使用空布局。相反,请使用布局管理器,让它们为您处理大小和位置。这会带来更加易于管理和灵活的用户界面。请花一些时间来学习不同的布局管理器。从Laying out Components Within a Container开始

  • 所有 Swing 应用程序都应在称为事件调度线程 (EDT) 的特殊线程上运行。请花一些时间阅读Initial Threads了解如何实现这一目标。

这是一个重构(修复“其他问题”),没有空布局,仅使用布局管理器、边距和边框,主代码中的代码显示了如何在事件调度线程

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;

public class Main {

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
Panels obj_panel = new Panels();
}
});
}
}

class Panels {

private JFrame frame;
private JPanel panel;
private JButton addButton;
private JButton modifyButton;
private JButton deleteButton;

Panels() {
initGUI();
launchFrame();
}

private void initGUI() {
frame = new JFrame(); // default layout manager is BorderLayout
panel = new JPanel(); // default layout manager is FlowLayout
addButton = new JButton("Add");
modifyButton = new JButton("Modify");
deleteButton = new JButton("Delete");
}

private void launchFrame() {
JPanel buttonPanel = new JPanel(new GridLayout(0, 1, 10, 10));
buttonPanel.setBackground(Color.RED);
buttonPanel.add(addButton);
buttonPanel.add(modifyButton);
// add margin to left and right of delete button
// other buttons will follow suit because of GridLayout
deleteButton.setMargin(new Insets(0, 50, 0, 50));
buttonPanel.add(deleteButton);
// create some space at the top for the buttonPanel
buttonPanel.setBorder(new EmptyBorder(20, 0, 0, 0));

panel.add(buttonPanel);
panel.setBackground(Color.RED);

frame.add(panel);
frame.setTitle("My Frame with Panel");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

关于java - 如何使用 Swing 在 JFrame 中添加面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25698479/

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