Java JFrame内容未完全显示
我正在做一个Java JFrame内容未完全显示,java,swing,jframe,awt,mixing,Java,Swing,Jframe,Awt,Mixing,我正在做一个JFrame,其中我的标签是从我的数据库动态添加的。在这种情况下,有时显示3个数据,有时显示5个数据 程序确实显示内容,但只显示适合屏幕的数据。这意味着当我向下滚动时,什么也看不到。 有人知道我哪里出错了吗 public class Trip extends JFrame implements ActionListener { ConnectionDB database = new ConnectionDB(); public Trip() throws SQLEx
JFrame
,其中我的标签是从我的数据库动态添加的。在这种情况下,有时显示3个数据,有时显示5个数据
程序确实显示内容,但只显示适合屏幕的数据。这意味着当我向下滚动时,什么也看不到。
有人知道我哪里出错了吗
public class Trip extends JFrame implements ActionListener {
ConnectionDB database = new ConnectionDB();
public Trip() throws SQLException
{
super("Trip");
Container c = getContentPane();
c.setLayout(new BorderLayout());
Definition a =new Definition();
int NoOfAS = a.travelTime(User.UserID);
Panel p = new Panel(new GridLayout(1,2));
Panel p1 = new Panel(new GridLayout(NoOfAS,1));
Label title = new Label("Itinerary");
title.setFont(new Font("Serif", Font.BOLD, 48));
c.add(title,"North");
JScrollPane scroll = new JScrollPane(p);
c.add(scroll,"Center");
for(int i=0;i<NoOfAS;i++)
{
String ASNAME = database.retrieveASNameItinerary(User.UserID,"AS_Name",i+1);
Label no = new Label("No:"+ (i+1) +" "+ASNAME);
no.setFont(new Font("Times New Noman",Font.BOLD,20));
Label descp = new Label(database.retrieveAS_Des(ASNAME,"AS_Description"));
Label SugTime = new Label("Suggested Time:"+database.retrieveAS_Des(ASNAME,"AS_Time"));
Label bus = new Label("Bus:"+database.retrieveAS_Des(ASNAME,"AS_Transport"));
Label fee = new Label("Fees:"+database.retrieveAS_Des(ASNAME,"AS_Price"));
Label line = new Label("---------------------------------------------------");
line.setForeground (Color.red);
Panel p2 = new Panel(new GridLayout(6,1));
p2.add(no);
p2.add(descp);
p2.add(SugTime);
p2.add(bus);
p2.add(fee);
p2.add(line);
p1.add(p2);
p.add(p1);
}
// setSize(900,1700);
pack();
show();
}
public static void main(String args[]) throws SQLException
{
StdPlan app = new StdPlan( );
app.addWindowListener(new WindowAdapter( ){});
}
@Override
public void actionPerformed(ActionEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
公共类Trip扩展JFrame实现ActionListener{
ConnectionDB数据库=新的ConnectionDB();
public Trip()引发SQLException
{
超级(“旅行”);
容器c=getContentPane();
c、 setLayout(新的BorderLayout());
定义a=新定义();
int NoOfAS=a.travelTime(User.UserID);
面板p=新面板(新网格布局(1,2));
面板p1=新面板(新网格布局(NoOfAS,1));
标签标题=新标签(“行程”);
title.setFont(新字体(“衬线”,Font.BOLD,48));
c、 增加(标题“北”);
JScrollPane scroll=新的JScrollPane(p);
c、 添加(滚动“居中”);
对于(int i=0;i我马上想到的问题是,您正在混合使用重重量和轻重量组件(标签
&面板
到JScrollPane
),这很少是一个好主意
改用JLabel
和JPanel
在您的中,对于下一个循环
您重复地将p1
添加到p
中,这实际上没有任何效果,事实上,p
可能应该使用边界布局
,因为它只包含一个组件
我还建议不要直接从JFrame
扩展,它严重限制了UI组件的可重用性。最好使用JPanel
作为基础,并将其添加到JFrame
的实例(或您可能喜欢使用的任何其他容器)中
通常不鼓励直接实现侦听器接口,因为它倾向于公开通常不希望人们调用的公共方法。最好使用内部或匿名类-IMHO我面临的直接问题是您混合了重组件和轻组件(标签
&面板
放在JScrollPane
上)-这很少是个好主意
改用JLabel
和JPanel
在您的中,对于下一个循环
您重复地将p1
添加到p
中,这实际上没有任何效果,事实上,p
可能应该使用边界布局
,因为它只包含一个组件
我还建议不要直接从JFrame
扩展,它严重限制了UI组件的可重用性。最好使用JPanel
作为基础,并将其添加到JFrame
的实例(或您可能喜欢使用的任何其他容器)中
通常不鼓励直接实现侦听器接口,因为它倾向于公开通常不希望人们调用的公共方法。最好使用内部或匿名类-IMHO问题是您混合了awt(重量级)和swing(轻量级)组件。请尝试仅使用JLabel
、JPanel
等
仅为尝试,您可以检查以下代码,当您的代码仅显示当前视图中的内容时,它会正确显示:
public class Test extends JFrame implements ActionListener {
//ConnectionDB database = new ConnectionDB();
public Test() throws SQLException
{
super("Trip");
Container c = getContentPane();
c.setLayout(new BorderLayout());
// Definition a =new Definition();
int NoOfAS = 15;//a.travelTime(User.UserID);
JPanel p = new JPanel(/*new GridLayout(1,2)*/);
JPanel p1 = new JPanel(new GridLayout(NoOfAS,1));
JLabel title = new JLabel("Itinerary");
title.setFont(new Font("Serif", Font.BOLD, 48));
c.add(title,BorderLayout.NORTH);
JScrollPane scroll = new JScrollPane(p);
c.add(scroll,BorderLayout.CENTER);
for(int i=0;i<NoOfAS;i++)
{
String ASNAME = i + "";//database.retrieveASNameItinerary(User.UserID,"AS_Name",i+1);
JLabel no = new JLabel("No:"+ (i+1) +" "+ASNAME);
no.setFont(new Font("Times New Noman",Font.BOLD,20));
JLabel descp = new JLabel(ASNAME);
JLabel SugTime = new JLabel(ASNAME);
JLabel bus = new JLabel(ASNAME);
JLabel fee = new JLabel(ASNAME);
JLabel line = new JLabel("---------------------------------------------------");
line.setForeground (Color.red);
JPanel p2 = new JPanel(new GridLayout(6,1));
p2.add(no);
p2.add(descp);
p2.add(SugTime);
p2.add(bus);
p2.add(fee);
p2.add(line);
p1.add(p2);
p.add(p1);
}
// setSize(900,1700);
pack();
show();
}
public static void main(String args[]) throws SQLException
{
Test app = new Test( );
app.addWindowListener(new WindowAdapter( ){});
}
@Override
public void actionPerformed(ActionEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
公共类测试扩展JFrame实现ActionListener{
//ConnectionDB数据库=新的ConnectionDB();
public Test()引发SQLException
{
超级(“旅行”);
容器c=getContentPane();
c、 setLayout(新的BorderLayout());
//定义a=新定义();
int NoOfAS=15;//a.travelTime(User.UserID);
JPanel p=新JPanel(/*新网格布局(1,2)*/);
JPanel p1=新JPanel(新网格布局(NoOfAS,1));
JLabel title=新JLabel(“行程”);
title.setFont(新字体(“衬线”,Font.BOLD,48));
c、 添加(标题,边界布局。北);
JScrollPane scroll=新的JScrollPane(p);
c、 添加(滚动、边框布局、居中);
对于(int i=0;i而言,问题在于您混合了awt(重型)和swing(轻型)组件。请尝试仅使用JLabel
,JPanel
等
仅为尝试,您可以检查以下代码,当您的代码仅显示当前视图中的内容时,它会正确显示:
public class Test extends JFrame implements ActionListener {
//ConnectionDB database = new ConnectionDB();
public Test() throws SQLException
{
super("Trip");
Container c = getContentPane();
c.setLayout(new BorderLayout());
// Definition a =new Definition();
int NoOfAS = 15;//a.travelTime(User.UserID);
JPanel p = new JPanel(/*new GridLayout(1,2)*/);
JPanel p1 = new JPanel(new GridLayout(NoOfAS,1));
JLabel title = new JLabel("Itinerary");
title.setFont(new Font("Serif", Font.BOLD, 48));
c.add(title,BorderLayout.NORTH);
JScrollPane scroll = new JScrollPane(p);
c.add(scroll,BorderLayout.CENTER);
for(int i=0;i<NoOfAS;i++)
{
String ASNAME = i + "";//database.retrieveASNameItinerary(User.UserID,"AS_Name",i+1);
JLabel no = new JLabel("No:"+ (i+1) +" "+ASNAME);
no.setFont(new Font("Times New Noman",Font.BOLD,20));
JLabel descp = new JLabel(ASNAME);
JLabel SugTime = new JLabel(ASNAME);
JLabel bus = new JLabel(ASNAME);
JLabel fee = new JLabel(ASNAME);
JLabel line = new JLabel("---------------------------------------------------");
line.setForeground (Color.red);
JPanel p2 = new JPanel(new GridLayout(6,1));
p2.add(no);
p2.add(descp);
p2.add(SugTime);
p2.add(bus);
p2.add(fee);
p2.add(line);
p1.add(p2);
p.add(p1);
}
// setSize(900,1700);
pack();
show();
}
public static void main(String args[]) throws SQLException
{
Test app = new Test( );
app.addWindowListener(new WindowAdapter( ){});
}
@Override
public void actionPerformed(ActionEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
公共类测试扩展JFrame实现ActionListener{
//ConnectionDB数据库=新的ConnectionDB();
public Test()引发SQLException
{
超级(“旅行”);
容器c=getContentPane();
c、 setLayout(新的BorderLayout());
//定义a=新定义();
int NoOfAS=15;//a.travelTime(User.UserID);
JPanel p=新JPanel(/*新网格布局(1,2)*/);
JPanel p1=新JPanel(新网格布局(NoOfAS,1));
JLabel title=新JLabel(“行程”);
title.setFont(新字体(“衬线”,Font.BOLD,48));
c、 添加(标题,边界布局。北);
JScrollPane scroll=新的JScrollPane(p);
c、 添加(滚动、边框布局、居中);
对于(int i=0;我为什么不只是在JScrollPane保存的JTable中显示数据?为什么要进行所有的旋转?在EDT上创建GUI。执行长时间运行的任务,例如从EDT访问DB。--不要阻止EDT(事件调度线程)-当这种情况发生时,GUI将“冻结”。而不是为长时间运行的任务实现SwingWorker
。有关更多详细信息,请参阅。1)app.addWindowListener(新的WindowAdapter(){};
一事无成。2)要更快地获得更好的帮助,请发布一条消息。3)如@hoverCraftFullOfels所述,使用JTable
获取表格数据。4)不要扩展框架,只使用一个。5)show()
很久以前就被弃用了。查看编译警告并解决它们。6)使用描述性变量名,学习类、方法和属性名的通用(特别是用于名称的大小写)并一致使用。这是我们分配的要求