我正在尝试按 JButton 打开新窗口。现在我的Jbutton的actionPerformed方法只是在按下后关闭窗口。我希望它在旧窗口关闭时打开一个新窗口。我知道,这个问题已经被问过了,但我尝试了很多东西,似乎没有人能够完美地运作。
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import java.util.Random;
public class secondTab extends JFrame
{
static JTabbedPane Pane = new JTabbedPane();
static JPanel Second = new JPanel();
static JPanel second = new JPanel(); // This Panel is inside the Second Panel
static JButton guess1 = new JButton();
static String words[] = new String[9];
static Random getRandomWord = new Random();
static int rr;
static JButton Labels[] = new JButton[10];
public static void main(String args[])
{
//construct frame
new secondTab().show();
}
public secondTab()
{
// code to build the form
setTitle("Shopping Cart");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(new GridBagLayout());
// position tabbed pane
GridBagConstraints gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 1;
gridConstraints.gridy = 1;
Pane.setForeground(Color.YELLOW);
Pane.setBackground(Color.MAGENTA);
getContentPane().add(Pane, gridConstraints);
getContentPane().setLayout(new GridBagLayout());
// Tabs Starts From Here
Second.setLayout(new GridBagLayout());
words[1] = "JAVA";
words[2] = "FLOAT";
words[3] = "VOID";
words[4] = "MAIN";
words[5] = "STATIC";
words[6] = "FINAL";
words[7] = "PRIVATE";
words[8] = "CHAR";
words[9] = "IF";
rr = getRandomWord.nextInt(10);
for(int i = 1; i <=words[rr].length(); i++)
{
Labels[i] = new JButton();
gridConstraints.gridx = 0;
gridConstraints.gridy = 0;
second.add(Labels[i]);
}
gridConstraints.gridx= 0;
gridConstraints.gridx= 0;
Second.add(second, gridConstraints);
guess1.setText("New Word");
gridConstraints.gridx = 0;
gridConstraints.gridy = 2;
Second.add(guess1, gridConstraints);
这是我的按钮的操作执行方法
// Action Performed method for the JButton guess1
guess1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
dispose();
}
});
Pane.addTab("Game ", Second);
pack();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds((int) (0.5 * (screenSize.width - getWidth())), (int) (0.5 *
(screenSize.height - getHeight())), getWidth(), getHeight());
}
}
答案 0 :(得分:4)
在dispose()之后添加新的面板语句。例如:添加
guess1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
new JFrame("New Window").show();
}
});
还有一点 - 你已经创建了9个元素的数组,并且你试图插入10个抛出ArrayIndexOutOfBound异常的索引。
答案 1 :(得分:2)
您必须删除按钮和其他控件的静态关键字,然后才能执行此操作
JTabbedPane Pane = new JTabbedPane();
JPanel Second = new JPanel();
JPanel second = new JPanel(); // This Panel is inside the Second Panel
JButton guess1 = new JButton();
String words[] = new String[10];
Random getRandomWord = new Random();
int rr;
JButton Labels[] = new JButton[10];
您必须创建同一个类的新实例并显示它
guess1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
new secondTab().show();
}
});
答案 2 :(得分:1)
所以,而不是关闭当前窗口并创建一个窗口的新实例,这只是烦人(而且有点懒)。
您应该提供一种方法来重置UI的状态。
您应该通过一些重置内部状态并更新UI的方法调用来执行此操作。
你可以通过删除“游戏”面板,创建它的新实例并将其添加回框架来完成同样的事情。
闪烁帧是一个坏主意 - 恕我直言
答案 3 :(得分:0)
Hi,
Please try like this.. It may help..
guess1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
dispose();
new AnotherJFrame();
}
}
---------------------------------------------
import javax.swing.JFrame;
import javax.swing.JLabel;
public class AnotherJFrame extends JFrame
{
public AnotherJFrame()
{
super("Another GUI");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new JLabel("Empty JFrame"));
pack();
setVisible(true);
}
}
答案 4 :(得分:0)
我看到您的问题已得到解答,因此这不能解决您的问题。我以为我会分享一些你可能想要修改的东西:
请勿使用show()/hide()
,因为它们已被弃用。 [<强> More info 强>]
分别使用setVisible(true/false)
。 [<强> More info 强>
在将每个组件添加到同一容器之前,您不必添加新的“GridBagLayout()”。即,您可以删除第二个getContentPane().setLayout(new GridBagLayout());
[ More info ]
请确保您了解Java中的数组索引(以及我所知道的所有编程语言 - 这不是那么多......但仍然是)从零开始! [<强> More info 强>
为了找到“可用”屏幕大小Toolkit.getDefaultToolkit().getScreenSize();
的中心是不够的,因为它包括屏幕插入(例如不可见的边距,任务栏等)。您还需要使用 Toolkit.getDefaultToolkit().getScreenInsets(GraphicsConfiguration);
并从屏幕宽度以及屏幕高度的顶部和底部插入中减去左右插图。
如果您只需要在屏幕上居中使用JFrame,则可以使用setLocationRelativeTo(null)
。 [<强> More info 强>
答案 5 :(得分:-1)
请参阅以下链接......这对您有帮助..
Java swing application, close one window and open another when button is clicked