Java 需要GUI方面的帮助吗

Java 需要GUI方面的帮助吗,java,swing,user-interface,Java,Swing,User Interface,对于按钮后退和按钮删除,我有到(130120195,30);和(1019019530),但它们仍然不会移动到底部 这里怎么了 public deleteAdmin(int num) { 超级(“删除管理员”); 立根(100200340229); contentPane=newjpanel(); setboorder(新的EmptyBorder(5,5,5,5)); setContentPane(contentPane); JPanel面板=新的JPanel(); 小组.立根(35、19、24

对于
按钮后退
按钮删除
,我有
(130120195,30);和(1019019530),但它们仍然不会移动到底部

这里怎么了

public deleteAdmin(int num)
{
超级(“删除管理员”);
立根(100200340229);
contentPane=newjpanel();
setboorder(新的EmptyBorder(5,5,5,5));
setContentPane(contentPane);
JPanel面板=新的JPanel();
小组.立根(35、19、242、146);
contentPane.add(面板);
JButton按钮=新JButton(“后退”);
按钮.立根(13012019530);
面板。添加(按钮);
JButton bckButton=新JButton(“删除”);
bckButton.setBounds(1019019530);
面板。添加(BCK按钮);
adminAPI admin=新的adminAPI();
ListallName=null;
试一试{
allName=admin.displayName();
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
//System.out.println(全名);
Object[]o1=allName.toArray();
JCheckBox[]复选框列表=新的JCheckBox[num];
System.out.println(全名);
//JLabel[]名称=新JLabel[num];
对于(inti=0;i
一个简单而错误的答案是,您打电话试图将组件精确放置到使用布局管理器的容器中,这仅在组件使用
null
布局时有效,但这同样不是一个好的解决方案,因为这会导致难以增强、升级和调试的僵化GUI

您的主要问题是,您首先尝试使用
setBounds(…)
。更好的方法是学习使用布局管理器,并以智能的方式使用它们,以便轻松有效地将组件放置在需要的位置。通常,您会希望嵌套JPanel,每个都使用自己的布局管理器来帮助放置好东西


例如,此gui:

已使用以下代码创建:

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();
        });
    }
}
导入java.awt.BorderLayout;
导入java.awt.GridLayout;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.*;
@抑制警告(“串行”)
公共类DeleteAdmin2扩展了JPanel{
私有列表复选框=新建ArrayList();
公共DeleteAdmin2(){
JPanel-topPanel=新的JPanel(新的网格布局(1,0,5,5));
topPanel.add(新按钮(“背面”);
添加(新按钮(“删除”);
字符串[]文本={“A1”、“B1”、“C1”、“D1”、“E1”、“A2”、“B2”、“C2”、“D2”、“E2”};
JPanel checkBoxPanel=newjpanel(newgridlayout(0,5,5,5));
用于(字符串文本:文本){
JCheckBox checkBox=新的JCheckBox(文本);
复选框。添加(复选框);
checkBoxPanel.add(复选框);
}
setLayout(新边界布局(5,5));
添加(topPanel,BorderLayout.PAGE_START);
添加(复选框面板,BorderLayout.CENTER);
setBorder(BorderFactory.createEmptyByOrder(5,5,5,5));
}
私有静态void createAndShowGui(){
JFrame=newjframe(“删除管理”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(新的DeleteAdmin2());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(()->{
createAndShowGui();
});
}
}

一些附带建议:

  • 看起来您希望将一个信息列表传递到此类中以显示它,并允许用户删除管理员。如果是这样,那么类的构造函数参数应该是管理员列表,而不是int
  • 如果这个类被用来显示JFrame,那么就让它显示一个JDialog,因为这个类看起来是要显示一个应用程序子窗口,在这种情况下,对话框窗口更合适。这还为您提供了以模式方式显示窗口的选项——这意味着您可以选择以这样的方式显示窗口,即用户必须在允许与主应用程序窗口交互之前处理窗口
  • 如果您让GUI类扩展或创建JPanel,而不是像JFrames这样的顶级窗口,您将发现更大的灵活性
  • <> LI>如果您想用一个管理员列表来显示可能的删除,请考虑将它们显示在JLIST中而不是JCuffbox的集合中。JList将使您更容易判断谁被选中,其模型可以保存实际的管理员对象(如果您有这样的类)
  • 学习并遵循Java命名约定——类名应以大写字母开头,变量名和方法名应以小写字母开头。遵循这一点将使您的代码更容易阅读,这将有助于那些试图帮助您的人,如果您在这里提出未来的问题
  • 另外,请改进您的问题标题。标题应该简洁而详细地告诉我们您的问题是什么,这是:
    “GUI中需要帮助”
    没有告诉我们任何有助于我们理解问题所在的信息。取而代之的是使用类似“JButtons在GUI中放置不正确”或类似的东西。这样做将有助于吸引更多的眼球关注你的问题,从而得到更快更好的答案

默认布局管理器是
FlowLayoutManager
它将继续一个接一个地添加组件。因此,您必须更改布局管理器以适应您的类型。请注意编辑以回答。交叉张贴:。@camickr有什么问题?我不知道
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();
        });
    }
}