[英]JFrame is too small and pack() isn't working
所以我有两个JFrame。 第一个按钮只有一个带有事件的按钮,可以调用第二个按钮。 第二个JFrame包含一个表,该表中填充了来自MySQL数据库的数据,该代码如下:
public class NewClass extends JFrame {
public NewClass()
{
ArrayList columnNames = new ArrayList();
ArrayList data = new ArrayList();
String url = "jdbc:mysql://localhost:3306/MYDB";
String userid = "root";
String password = "password";
String sql = "SELECT * FROM MYTABLE";
try (Connection connection = DriverManager.getConnection( url, userid, password );
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery( sql ))
{
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
for (int i = 1; i <= columns; i++)
{
columnNames.add( md.getColumnName(i) );
}
while (rs.next())
{
ArrayList row = new ArrayList(columns);
for (int i = 1; i <= columns; i++)
{
row.add( rs.getObject(i) );
}
data.add( row );
}
}
catch (SQLException e)
{
System.out.println( e.getMessage() );
}
Vector columnNamesVector = new Vector();
Vector dataVector = new Vector();
for (int i = 0; i < data.size(); i++)
{
ArrayList subArray = (ArrayList)data.get(i);
Vector subVector = new Vector();
for (int j = 0; j < subArray.size(); j++)
{
subVector.add(subArray.get(j));
}
dataVector.add(subVector);
}
for (int i = 0; i < columnNames.size(); i++ )
columnNamesVector.add(columnNames.get(i));
JTable table = new JTable(dataVector, columnNamesVector)
{
public Class getColumnClass(int column)
{
for (int row = 0; row < getRowCount(); row++)
{
Object o = getValueAt(row, column);
if (o != null)
{
return o.getClass();
}
}
return Object.class;
}
};
JScrollPane scrollPane = new JScrollPane( table );
getContentPane().add( scrollPane );
JPanel buttonPanel = new JPanel();
getContentPane().add( buttonPanel, BorderLayout.SOUTH );
}
public static void main(String[] args)
{
NewClass frame = new NewClass();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
当我直接运行NewClass时,pack()会按预期工作,并根据其中的平台大小调整JFrame的大小。 但是,每当我使用按钮运行第一个JFrame然后按下按钮来调用事件时,都会弹出NewClass,但是窗口太小了。 我试过使用setSize和显然pack()。
当我手动调整JFrame的大小时,列和行都应有的位置,只是我不知道为什么pack()无法正常工作。
您是否有关于无需手动调整第二个JFrame大小的想法? 提前致谢!
编辑:
以下是第一个JFrame上调用NewClass的按钮的代码:
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt)
{
NewClass frame = new NewClass();
frame.setVisible(true);
}
更改...
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt)
{
NewClass frame = new NewClass();
frame.setVisible(true);
}
更像...
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt)
{
NewClass frame = new NewClass();
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
这似乎与您在main
方法中所做的事情相符
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.