我是编程的新手,所以我不知道做事的正确方法,并且只是在尝试一下。我想创建一个可运行的,可以在不同内容之间来回移动。以下在从内部eclipse运行时起作用,但是如果我以jar文件的形式导出它,一旦我向前移动,然后再次向前移动,向前迈进,将不再给我内容,而只是后退按钮。我尝试了这样的事情:
public class TestMain extends JFrame {
static PanelClass panel;
static boolean inUse = false;
public static void main(String[] args) {
panel = new PanelClass();
final TestMain test = new TestMain();
final Container container = test.getContentPane();
container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
test.setSize(500, 500);
final JButton back = new JButton("Back");
back.setAlignmentX(Component.CENTER_ALIGNMENT);
back.setMaximumSize(new Dimension(200, 80));
back.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
test.getContentPane().removeAll();
test.setContentPane(container);
test.getContentPane().revalidate();
}
});
final JButton exit = new JButton("Exit");
exit.setAlignmentX(Component.CENTER_ALIGNMENT);
exit.setMaximumSize(new Dimension(200, 80));
exit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
JButton problem = new JButton("Problem");
problem.setMaximumSize(new Dimension(200, 80));
problem.setAlignmentX(Component.CENTER_ALIGNMENT);
problem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
inUse = true;
test.setContentPane(panel);
test.getContentPane().add(back);
test.getContentPane().revalidate();
}
});
container.add(problem);
container.add(exit);
test.setVisible(true);
test.setDefaultCloseOperation(EXIT_ON_CLOSE);
test.setLocationRelativeTo(null);
while (true) {
while (!panel.stop && !inUse) {
}
inUse = false;
panel = new PanelClass();
test.setContentPane(panel);
test.getContentPane().add(back);
test.getContentPane().revalidate();
}
}
}
和我想拥有的第二个内容的课程:
public class PanelClass extends JPanel {
JTextArea text = new JTextArea("Some text here!" + 'n' + 'n');
JButton button1 = new JButton("Button 1");
JButton button2 = new JButton("Button 2");
boolean stop = false;
public PanelClass() {
text.setEditable(false);
text.setMaximumSize(new Dimension(300, 300));
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
Dimension d = new Dimension(200, 60);
button1.setAlignmentX(Component.CENTER_ALIGNMENT);
button1.setMaximumSize(d);
button2.setAlignmentX(Component.CENTER_ALIGNMENT);
button2.setMaximumSize(d);
this.add(text);
this.add(button1);
this.add(button2);
}
}
实际工作方法是什么?如果我有很多窗户,我希望能够在之间来回移动怎么办?我知道这是很多不良/可能是读的代码,但我希望有人可以帮助我。
这是按"问题"时运行的代码:
test.setContentPane(panel);
test.getContentPane().add(back);
test.getContentPane().revalidate();
这是按"返回"时运行的代码:
test.getContentPane().removeAll();
test.setContentPane(container);
test.getContentPane().revalidate();
当您按"问题"然后"回"然后"问题"时,调用的顺序是什么?就是这样。(Revalidate()呼叫不会弄乱任何东西,所以我不会显示它们)
// Problem
test.setContentPane(panel);
test.getContentPane().add(back);
// Back
test.getContentPane().removeAll();
test.setContentPane(container);
// Problem
test.setContentPane(panel);
test.getContentPane().add(back);
请注意,将面板设置为内容窗格,然后在按下"返回"时从中删除所有组件。下次按"问题"时,面板上没有组件,因为您删除了它们。
您是否尝试将作为可运行的jar导出,然后选择" eclipse"以jar的导出时,将所需库中的包装库选择为生成的jar?