gpt4 book ai didi

java - 在 GUI 中需要帮助

转载 作者:行者123 更新时间:2023-11-30 06:09:56 25 4
gpt4 key购买 nike

对于 button Back button Delete ,我有 setBounds(130, 120, 195,30);和 (10, 190, 195,30); ,但它们仍然没有移到底部。

这是怎么回事?

enter image description here

public deleteAdmin(int num)
{
super("Delete Admin");
setBounds(100, 200, 340, 229);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);

JPanel panel = new JPanel();
panel.setBounds(35, 19, 242, 146);
contentPane.add(panel);

JButton button = new JButton("Back");
button.setBounds(130, 120, 195,30);
panel.add(button);

JButton bckButton = new JButton("Delete");
bckButton.setBounds(10, 190, 195,30);
panel.add(bckButton);

adminAPI admin = new adminAPI();
List<String>allName = null;
try {
allName= admin.displayName();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//System.out.println(allName);
Object [] o1=allName.toArray();
JCheckBox[] checkBoxList = new JCheckBox[num];
System.out.println(allName);
//JLabel[] names = new JLabel[num];
for(int i = 0; i < num; i++) {
checkBoxList[i] = new JCheckBox(""+o1[i]);
System.out.println(o1[i]);
contentPane.add(checkBoxList[i]);

}


}

最佳答案

快速简单但错误的答案是,您正在尝试将组件准确放置到使用布局管理器的容器中,这仅在组件使用 null 布局时有效,但同样这不是一个好的解决方案,因为这会导致很难增强、升级和调试的僵化 GUI。

您的主要问题是您首先尝试使用 setBounds(...)。更好的方法是学习使用布局管理器并以巧妙的方式使用它们来轻松有效地将组件放置在您想要的位置。通常,您会希望嵌套 JPanel,每个 JPanel 都使用自己的布局管理器来帮助妥善放置。<​​/p>


例如这个图形用户界面:

enter image description here

是用这段代码创建的:

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.List;

import javax.swing.*;

@SuppressWarnings("serial")
public class DeleteAdmin2 extends JPanel {
private List<JCheckBox> checkBoxes = new ArrayList<>();

public DeleteAdmin2() {
JPanel topPanel = new JPanel(new GridLayout(1, 0, 5, 5));
topPanel.add(new JButton("Back"));
topPanel.add(new JButton("Delete"));

String[] texts = { "A1", "B1", "C1", "D1", "E1", "A2", "B2", "C2", "D2", "E2" };
JPanel checkBoxPanel = new JPanel(new GridLayout(0, 5, 5, 5));
for (String text : texts) {
JCheckBox checkBox = new JCheckBox(text);
checkBoxes.add(checkBox);
checkBoxPanel.add(checkBox);
}

setLayout(new BorderLayout(5, 5));
add(topPanel, BorderLayout.PAGE_START);
add(checkBoxPanel, BorderLayout.CENTER);
setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
}

private static void createAndShowGui() {
JFrame frame = new JFrame("Delete Admin");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new DeleteAdmin2());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

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

一些侧面的建议:

  • 您似乎想将信息列表传递给此类以显示它并允许用户删除管理员。如果是这样,那么该类的构造函数参数应该是这个管理员列表,而不是一个 int。
  • 如果该类用于显示 JFrame,则改为显示 JDialog,因为该类旨在显示应用程序子窗口,在这种情况下,对话框窗口更为合适。这也为您提供了以模式方式显示窗口的选项——这意味着您可以选择以用户必须先处理窗 Eloquent 能与主应用程序窗口交互的方式显示窗口。<
  • 如果您的 GUI 类扩展或创建 JPanel 而不是顶层窗口(如 JFrames),您会发现更多的灵 active 。
  • 如果您希望向此类提供可能删除的管理员列表,请考虑将它们显示在 JList 而不是 JCheckBox 的集合中。 JList 将使您更容易分辨谁被选中,并且它的模型可以包含实际的 Administrator 对象(如果您有这样的类)。
  • 学习并遵循 Java 命名约定——类名应以大写字母开头,变量名和方法名应以小写字母开头。遵循这一点将使您的代码更易于阅读,这将有助于那些试图帮助您的人,如果您以后在这里提出问题。
  • 另外,请改进您的问题标题。标题应该简洁而翔实地告诉我们您的问题是什么,而这:“在 GUI 中需要帮助” 没有告诉我们任何可以帮助我们理解问题所在的内容。而是使用诸如“JButtons 未正确放置在 GUI 中”之类的内容,或类似的内容。这样做有助于让更多人关注您的问题,从而更快更好地获得答案。

关于java - 在 GUI 中需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36957438/

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