【发布时间】:2016-11-04 11:54:28
【问题描述】:
我是一个新手,试图在 swing 中使用我的第一个布局管理器,但无法显示我的 JPanel 并且窗口已最小化。我已经查阅了 JavaDoc,但我无法弄清楚我做错了什么.我只想要一个正确方向的指针。我也连接到我的 mysql 数据库,但那是另一次了。任何建议将不胜感激:)
这是我的代码
package learn;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JOptionPane;
import javax.swing.JFrame;
import java.sql.*;
import javax.swing.JPanel;
import java.awt.BorderLayout;
public class TestGUI3 extends JFrame implements ActionListener
{
JRadioButton rb1, rb2, rb3;
JFrame f;
JButton b;
JPanel myFirstPanel;
public TestGUI3()
{
f = new JFrame("Welcome to Ballon d'or , created by Darren Estcourt");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFirstPanel = new JPanel();
f.add(myFirstPanel);
rb1 = new JRadioButton("Start New Game");
rb2 = new JRadioButton("Load Game");
rb3 = new JRadioButton("Quit");
myFirstPanel.add(rb1);
myFirstPanel.add(rb2);
myFirstPanel.add(rb3);
ButtonGroup bg=new ButtonGroup();
bg.add(rb1);
bg.add(rb2);
bg.add(rb3);
b = new JButton("OK");
myFirstPanel.add(b);
b.addActionListener(this);
f.setLayout(new BorderLayout());
f.pack();
f.setVisible(true);
}
@Override public void actionPerformed(ActionEvent e)
{
if(rb1.isSelected())
{
f.dispose();
ManagerName test = new ManagerName();
test.getFrame().setVisible(true);
}
if(rb2.isSelected())
{
JOptionPane.showMessageDialog(f,"Load Game");
}
if(rb3.isSelected())
{
System.exit(0);
}
}
public static void main(String[] args)
{
try
{
String myDriver = "org.gjt.mm.mysql.Driver";
String myUrl = "jdbc:mysql://localhost:3306/ballondor?autoReconnect=true&useSSL=false";
Class.forName(myDriver);
Connection conn = DriverManager.getConnection(myUrl, "root", "Lucia290907");
String query = "SELECT * FROM clubInfo";
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query);
while (rs.next())
{
int TeamID = rs.getInt("TeamID");
String TeamName = rs.getString("TeamName");
// print the results
System.out.format("%s, \n", TeamName);
} // end while loop
st.close();
} // end try
catch (Exception e)
{
System.err.println("Got an exception! ");
System.err.println(e.getMessage());
}
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
TestGUI3 test = new TestGUI3();
test.setVisible(true);
}
});
}
}
【问题讨论】:
-
你的类扩展一个 JFrame 并在其主体中初始化一个 JFrame 是否有原因?
-
实例化该 JFrame 的主要方法在哪里?然后:您希望我们花时间帮助您,所以请您花几分钟时间正确缩进/格式化您的源代码 - 谢谢!
-
最初我只有一个 JFrame 实例并在我的构造函数中对其进行了初始化。但是,我阅读了有关使用 EDT 的信息,无论出于何种原因,我都不能简单地通过 EDT 调用我的构造函数,因为 SetVisible() 方法有一个“找不到符号”。所以,为了解决这个问题,我扩展了 JFrame 类并希望.....程序在 EDT 上运行。
-
作为提示,写@paul 或任何您想通知您已回复的人(
@很重要)。这并没有使程序在 EDT 中运行,SwingUtilities在 EDT 上运行,但首先发布 minimal reproducible example,我们可以看到与您上面所说的"cannot find symbol"相同的错误 -
您提供的代码写得不好(并且格式不正确)。我相信这是您的问题的一部分,不幸的是我们无法为您重写代码。给出的代码存在不止一个问题,但是下面有两个答案可以帮助您解决您所询问的问题。