gpt4 book ai didi

java - 为什么我的 JPanel 不显示?

转载 作者:行者123 更新时间:2023-11-29 06:07:40 24 4
gpt4 key购买 nike

我是一个新手,试图在 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);

}
});
}



}

最佳答案

顺序很重要,我现在无法测试,但是 BorderLayout 是组件上的默认布局管理器,因此不需要这一行:

    f.setLayout(new BorderLayout());

我敢打赌,当您删除上面的行时,它会让一个 JButton 出现,这只是因为您添加到 JPanel 的所有内容都会被添加的新元素“覆盖”(因为 BorderLayout) ,如果您希望它垂直对齐,那么您可能想尝试使用 1 列和 0 行的 BoxLayoutGridLayout (不是错字, 0 行表示 N 行)我现在无法发布链接,但我敢打赌我在手机上看到的代码。

此外,您还在代码上扩展了 JFrame 并创建了它的一个实例,使用一个或另一个,最好使用该实例,因为如果您扩展 JFrame这意味着你的类一个JFrame,如果你需要扩展某些东西最好扩展JPanel

但为了更好地帮助尽快发布正确的 MCVE,即仅发布 GUI 代码,我们不需要数据库连接或执行的操作,只需要您将组件放置在 JPanel 中的代码

关于java - 为什么我的 JPanel 不显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40422059/

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