我有一个应用程序,允许用户选择一个选项,并根据用户选择从组件中删除一个JPanel,添加新的JPanel并重新验证该组件
看到代码:
if (c != null) {
contentPane.remove(c);
}
c = new AddBookInterface(theLibrary);
contentPane.add(c);
contentPane.revalidate();
break;
c是一个组件
我有几个JPanels,用户可以在它们之间切换,并且开关可以正常工作。但是,当我根据用户选择添加此JPanel时,以后添加的JPanels无法正确加载。是什么原因造成的?
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();
}
});
}
}
希望这会有所帮助。
问候。
2.6 在不同的窗口中切换 当CGDB最初运行时,CGDB默认处于GDB模式。状态栏右侧的 * 符号显示当前的输入会被传入GDB窗口。按下 ESC 键可切换至代码窗口,CGDB模式切换键是将用户从别的模式切换到CGDB模式的快捷键,默认的CGDB模式切换键是 ESC 。如果您想改变CGDB模式切换键对应的快捷键,请查阅CGDB的配置选项。参见第4章。 现在CGDB处于CGDB模式。要切换回GDB模
我正面临以下错误!!
> 我正在将控件从父窗口传递到子窗口 我正在子窗口中执行操作 执行后,将从子窗口再打开一个窗口(第一个子窗口的子窗口)。 我必须关闭两个子窗口并返回父窗口。 我无法将控件从子窗口切换到父窗口。我已经试用了下面的代码 /在子窗口中执行操作/
我正在使用Python进行selenium自动化项目。 我面临一个问题,这是处理多个浏览器窗口。 场景如下所示。当我单击主页上的链接时,将打开一个新窗口。在新打开的窗口中,我无法执行任何操作,因为焦点仍然在主页web驱动程序上。 谁能告诉我如何将焦点从背景窗口转换到新打开的窗口? 一种可能的解决方案是,但它需要窗口的名称。如何找出窗口的名字?如果这是一个错误的方法,谁能给出一些代码例子来执行这个操
主窗口是由一个工具栏、几个窗格和图表画布所组成,让你设计模型。在主窗口中,每一个模型是由一个选项卡来表示。一个模型文件可以有多个图表。你可以在列表中选择图表。若要创建一个新图表,从菜单栏选择“图表”->“新建图表”。 【提示】Navicat Data Modeler 增加了对系统深色模式的支持。 工具栏 工具栏位于主窗口的顶部。工具栏显示的按钮是根据模型类型(物理、逻辑和概念)。你可以使用工具栏来
主窗口是由一个工具栏、几个窗格和图表画布所组成,让你设计模型。一个模型文件可以有多个图表。在模型中,每一个图表是由一个选项卡来表示。若要创建一个新图表,从菜单栏选择“文件”->“新建图表”。 工具栏 工具栏位于主窗口的顶部。工具栏显示的按钮是根据模型类型(物理、逻辑和概念)。你可以使用工具栏来做一些基本的工作,例如:添加表、实体或视图,应用自动布局等。 浏览器窗格 浏览器窗格有两个选项卡:“模型”