gpt4 book ai didi

java - 在主窗口中切换 JPanel

转载 作者:行者123 更新时间:2023-11-30 06:32:19 26 4
gpt4 key购买 nike

我有一个应用程序允许用户选择一个选项,并根据用户的选择从组件中删除一个 JPanel,添加新的 JPanel 并重新验证该组件

查看代码:

          if (c != null) {
contentPane.remove(c);
}
c = new AddBookInterface(theLibrary);
contentPane.add(c);
contentPane.revalidate();
break;

c 是一个组件

我有几个 JPanel,用户可以在它们之间切换并且切换正常。但是,当我根据用户选择添加此 JPanel 时,之后添加的 JPanel 无法正确加载。这是什么原因造成的?

   public class RemoveBookInterface extends JPanel {

private Library theLibrary;

public RemoveBookInterface(Library theLibrary) {
this.theLibrary = theLibrary;
setSize(400, 400);
setLayout(new BorderLayout());
setVisible(true);
removeBook(theLibrary);
}

public void removeBook(Library theLibrary) {
// prompt user for book id of book to remove
Long ID = Long
.parseLong(JOptionPane
.showInputDialog("Enter the library book ID for the book you want to remove"));
try {
// get library book info and store it to display in message
LibraryBook lb = theLibrary.getInventory().findLibraryBook(ID);
// remove book
theLibrary.removeBook(ID);
// display message indicating book was removed
JOptionPane
.showMessageDialog(
null,
"The following library book was removed:\n"
+ lb.toString());
} catch (Exception e1) {
JOptionPane.showMessageDialog(null, e1.getMessage());

}
}

最佳答案

更好的方法是转向 CardLayout。但是如果你想坚持你的方法,那么试着在你的行之后添加这个

if (c != null) {
contentPane.remove(c);
}
c = new AddBookInterface(theLibrary);
contentPane.add(c);
contentPane.revalidate();
contentPane.repaint();
frame.validate();
frame.repaint();
break;

或者您可能忘记为您的事件调度程序线程安排作业。帮助您实现目标的示例程序:

import java.awt.event.*;
import javax.swing.*;

public class TwoPanelTest implements ActionListener
{
private JFrame frame;

private JPanel panel1;
private JPanel panel2;

private JButton button1;
private JButton button2;

private JLabel label1;
private JLabel label2;

private JTextField tfield1;
private JTextField tfield2;

public TwoPanelTest()
{
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel1 = new JPanel();
panel2 = new JPanel();

label1 = new JLabel("This is Label 1");
label2 = new JLabel("This is Label 2");

button1 = new JButton("BUTTON 1");
button2 = new JButton("BUTTON 2");
button1.addActionListener(this);
button2.addActionListener(this);

tfield1 = new JTextField(20);
tfield2 = new JTextField(20);

panel1.add(label1);
panel1.add(button1);
panel1.add(tfield1);

panel2.add(label2);
panel2.add(button2);
panel2.add(tfield2);

tfield1.setText("MY TEXT WILL CHANGE.");
frame.setContentPane(panel1);
frame.pack();
frame.setVisible(true);
}

public void actionPerformed(ActionEvent ae)
{
JButton button = (JButton)ae.getSource();
if (button == button1)
{
frame.remove(panel1);
frame.setContentPane(panel2);
tfield2.setText("TEXTFIELD 2");
frame.validate();
frame.repaint();
}
else if (button == button2)
{
frame.remove(panel2);
frame.setContentPane(panel1);
tfield1.setText("TEXTFIELD 1");
frame.validate();
frame.repaint();
}
}


public static void main(String[] args)
{
// Here Event Dispatcher thread is responsible for
// calling the function which creates and displays your GUI
// or it itself contains the code for creating and displaying
// the GUI, to remove hickups experienced while updating the
// GUI on the run.
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new TwoPanelTest();
}
});
}
}

希望这能在某些方面有所帮助。

问候。

关于java - 在主窗口中切换 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8854939/

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