gpt4 book ai didi

Java - 更新/更改 JFrame 的内容 - (删除旧内容)并插入新内容(面板 itd。)

转载 作者:行者123 更新时间:2023-12-02 00:32:15 26 4
gpt4 key购买 nike

目标:当用户提供有效的登录名和密码时 ->(JFrame - 销毁登录内容)并将自己的内容更改为游戏内容..(功能GRA)

问题:

当我尝试使用时:

main.contentpane.removeAll():main.removeAll():
布局

以及其他(命令)

程序未加载新内容。

这是我的代码:

class GUI implements ActionListener {

public static JPanel image_cont;

// definicja klasy wątka
runner pierwiast = new runner();

public static JFrame main = new JFrame();

public static JLabel ilosc_pkt = new JLabel("0");

JTextField pole, login_p, haslo_p;

dostep_z_o logowanie = new dostep_z_o("baza_danych.txt");

public GUI() {







// wymiary okna x, y (zasada oznakowania, wykresy matematyczne)
main.setSize(900, 400);

// porządkowanie pozycji elementów
//setLayout(new FlowLayout());

// tytuł okna
main.setTitle("Gra ułamki - logowanie do gry");






main.setResizable(false);
main.setVisible(true);


main.setLayout(null);


JLabel login = new JLabel("Login : ");
JLabel haslo = new JLabel("Hasło : ");
login_p = new JTextField("",10);
haslo_p = new JTextField("",10);
JButton przycisk = new JButton("Zaloguj!");

// nadanie akcji
przycisk.setActionCommand("Login");

// dodanie do Action listenera
przycisk.addActionListener(this);

// marginery - zakres, pozycji dla obiektu
Insets insets = main.getInsets();

main.add(login);
main.add(login_p);
main.add(haslo);
main.add(haslo_p);
main.add(przycisk);

// preferowany rozmiar przez jave dla elementu
Dimension size = przycisk.getPreferredSize();
System.out.println(size);

login.setBounds(296 + insets.left, 4 + insets.top, 41, 16);
login_p.setBounds(342 + insets.left, 2 + insets.top, 114, 20);
haslo.setBounds(296 + insets.left, 32 + insets.top, 41, 16);
haslo_p.setBounds(342 + insets.left, 30 + insets.top, 114, 20);
przycisk.setBounds(467 + insets.left, 2 + insets.top, 117, 48);
// (900 / 2) - ((41 + 5 + 114 + 11 + 117) / 2 )
// 450 - 144 = 296



main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public void gra()
{

main.removeAll();
main.getContentPane().removeAll();

main.setTitle("Gra ułamki - złap pierwiastki chemiczne. Quickly! -- Aktualna ilość punktów : " + runner.punkty);

JPanel content = new JPanel();
content.setBackground(Color.green);
//content.setLayout(new BorderLayout(200, 200));
content.setPreferredSize(new Dimension(900, 75));
content.setLayout(null);
//content.setSize(0, 0);

// pole tekstowe
pole = new JTextField("",2);
// definiowanie przycisku
JButton przycisk = new JButton("Zatwierdź wprowadzenie!");
// nadanie komendy wysyłanej do action listenera
przycisk.setActionCommand("Spr");
// dodanie do Action listenera
przycisk.addActionListener(this);

//opis punktów
JLabel opis_p = new JLabel("Ilość punktów : ");

JLabel n_pierw = new JLabel("Nazwa pierwiastka : ");
//ilosc_pkt

// marginery - zakres, pozycji dla obiektu
Insets insets = content.getInsets();

content.add(n_pierw);
content.add(pole);
content.add(przycisk);
content.add(opis_p);
content.add(ilosc_pkt);




// setBounds - ustawia pozycje, Od lewej krawedzi, od gornej krawedzi, dlugosc_obiektu, _ jego wysokosc
// przy ustalaniu pozyucji trzeba wziasc pod uwage margines
n_pierw.setBounds(284 + insets.left, 12 + insets.top, 117, 16);
pole.setBounds(284 + 115 + insets.left, 10 + insets.top, 30, 20);
przycisk.setBounds(284 + 153 + insets.left, 7 + insets.top, 179, 26);

// Do prawego boku
opis_p.setBounds(750 + insets.left, 12 + insets.top, 88, 16);
ilosc_pkt.setBounds(840 + insets.left, 9 + insets.top, 88, 22);

// ustawienia Fonta
Font font = new Font ("Calibri", Font.BOLD, 20);
ilosc_pkt.setFont(font);





main.getContentPane().setLayout(new FlowLayout());
main.getContentPane().add(pierwiast);
main.getContentPane().add(content);





pierwiast.kontrola_gui(this);
pierwiast.init();




main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("Spr"))
{
// pobranie tekstu z TextFielda
String w_pierw = pole.getText();

// Sprawdza czy String nie jest pusty
if(!("").equals(w_pierw) && pierwiast.x1 != -1)
{

// sprawdza wprowadzony pierwiastek czy jest taki sam jak wpisalismy
if (!w_pierw.equals(pierwiast.tab_pierw[pierwiast.x1].p_ch_n))
{

// Zmniejszenie ilości punktów
pierwiast.punkty -=1;
ilosc_pkt.setText(Integer.toString(pierwiast.punkty));

JOptionPane.showMessageDialog(null, "Źle! Módl się byś nie zostął/a potraktowany/a chlorem!");
main.setTitle("Gra ułamki - złap pierwiastki chemiczne. Quickly! - " + pierwiast.tab_pierw[runner.x1].p_ch_n + " - Źle (-1 punkt) -- Aktualna ilość punktów : " + pierwiast.punkty);
}
else
{
JOptionPane.showMessageDialog(null, "Poprawnie! Pani z chemii się cieszy!");

// Zwiększenie ilości punktów
pierwiast.punkty +=1;
ilosc_pkt.setText(Integer.toString(pierwiast.punkty));

main.setTitle("Gra ułamki - złap pierwiastki chemiczne. Quickly! - " + pierwiast.tab_pierw[runner.x1].p_ch_n + " - Dobrze (+1 punkt) -- Aktualna ilość punktów : " + pierwiast.punkty);
// ustawienie statusu do znikniecia
pierwiast.tab_pierw[pierwiast.x1].status_p = 2;

// usuwanie poprzedniego wyboru pierwiastka (unikniecie ponownego odkrycia)
pierwiast.x1 = -1;

//czyszczenie pola - do wpisywania
pole.setText("");

}
}
else
{
JOptionPane.showMessageDialog(null, "Nie wpisano nazwy pierwiastka lub nie kliknięto");
}

}
else if (e.getActionCommand().equals("Login"))
{
String login = login_p.getText();
String haslo = haslo_p.getText();

if(!"".equals(login) && !"".equals(haslo))
{
logowanie.logowanie(login, haslo);

if (logowanie.login)
{
this.gra();
}
}
else
{
JOptionPane.showMessageDialog(null, "Nie wpisano loginu i hasła");
}
}
}


}

我哪里错了?怎么了?

--- [编辑] ---

解决(对于其他寻求者):

@Dave 提示

//为每个组件添加重新验证(Gra函数)

        main.getContentPane().add(pierwiast);
main.getContentPane().add(content);

pierwiast.revalidate();
content.revalidate();

并且(在 start gra 函数中)

        //main.getContentPane().removeAll(); <- Delete this
//main.getContentPane().validate(); <- Delete this

main.setTitle("Gra ułamki - złap pierwiastki chemiczne. Quickly! -- Aktualna ilość punktów : " + runner.punkty);

还有加载之前(函数gra)(public void actionPerformed)在

                if (logowanie.login)
{
main.getContentPane().removeAll(); //add this
main.repaint(); //add this
main.validate(); //add this
this.gra();
}

最佳答案

完成新内容的设置后,您需要在 main 上调用 revalidate()

关于Java - 更新/更改 JFrame 的内容 - (删除旧内容)并插入新内容(面板 itd。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8716424/

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