gpt4 book ai didi

java - 通过对象 HashMap (java) 进行具有保存功能的设置的 GUI

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

我在创建将我的设置保存到文本文件中的 GUI 时遇到问题。这是我到目前为止所实现的。

    private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 760, 494);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel panel = new JPanel();
frame.getContentPane().add(panel, BorderLayout.NORTH);

JLabel lblMudknife = new JLabel("MudKnife");
lblMudknife.setFont(new Font("Tahoma", Font.BOLD, 14));
panel.add(lblMudknife);

JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
frame.getContentPane().add(tabbedPane, BorderLayout.CENTER);

JPanel panel_1 = new JPanel();
tabbedPane.addTab("Build", null, panel_1, null);
panel_1.setLayout(null);

JTabbedPane tabbedPane_1 = new JTabbedPane(JTabbedPane.TOP);
tabbedPane.addTab("Settings", null, tabbedPane_1, null);

JPanel panel_2 = new JPanel();
tabbedPane_1.addTab("Environment", null, panel_2, null);
panel_2.setLayout(null);

JPanel panel_3 = new JPanel();
tabbedPane_1.addTab("Scraper", null, panel_3, null);
panel_3.setLayout(null);

...

    HashMap<String, Object[]> hm = new HashMap<String, Object[]>();
Object[] a = new Object[2];

...

    a[0] = new JLabel("SecondFactorHREF");
a[1] = new JTextField();
hm.put("SecondFactorHREF", a);

a[0] = new JLabel("SplashPage");
a[1] = new JTextField();
hm.put("SplashPage", a);

int x = 10;
int y = 10;
int widthLabel = 70;
int heightLabel = 15;
int widthField = 90;
int heightField = 15;

for (Entry<String, Object[]> entry : hm.entrySet()) {
key = entry.getKey();
label = (JLabel) entry.getValue()[0];
label.setText(key);
label.setBounds(x, y, widthLabel, heightLabel);
field = (JTextField) entry.getValue()[1];
field.setBounds(x+90,y,widthField,heightField);
panel_2.add(label);
panel_2.add(field);
System.out.println(entry.getValue().toString());
System.out.println("Key, Label Value, Field Value: " + key + ", " + label.getName() + ", " + field.getText());
y += 15;
}

这将无法在布局中正确显示。它似乎只显示 hashMap 中的最后一个。

从这里我有一个类可以将任何对象保存到文件中。然后我计划在需要初始化设置时只读取该对象并迭代它。

最佳答案

您不断向 HashMap 添加相同的数组对象,但当您不断更改其内容时,它仍然是相同的数组对象,并且数组引用永远不会改变。如果你想添加一个新的数组对象,你应该创建一个新的数组对象。

更好的是,只需将其设为 HashMap<String, JTextField>并动态创建 JLabel:

HashMap<String, JTextField> hm = new HashMap<>();

// ........

hm.put("SecondFactorHREF", new JTextField());
hm.put("SplashPage", new JTextField());

for (Entry<String, JTextField> entry : hm.entrySet()) {
key = entry.getKey();
label = new JLabel(key);
// .... no done't set bounds -- use layout managers!
// label.setBounds(x, y, widthLabel, heightLabel);
field = entry.getValue();
// field.setBounds(x+90,y,widthField,heightField); // again use layout managers
panel_2.add(label);
panel_2.add(field);
}

此外,不要使用 null 布局和 setBounds,而应使用布局管理器。而空布局和 setBounds()对于 Swing 新手来说,Swing GUI 似乎是创建复杂 GUI 的最简单、最好的方法,您创建的 Swing GUI 越多,在使用它们时遇到的困难就越严重。当 GUI 调整大小时,它们不会调整组件的大小,它们是增强或维护的皇家女巫,放置在滚动 Pane 中时它们完全失败,在所有平台或与原始分辨率不同的屏幕分辨率上查看时,它们看起来非常糟糕.

关于java - 通过对象 HashMap (java) 进行具有保存功能的设置的 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34668546/

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