frame.getContentPane()加();工作不正常?

时间:2015-03-31 08:05:48

标签: java swing jframe

我一直在为我创建的这些脚本带来一些(非常烦人的)麻烦。

Sburb.java

import java.awt.Color;
import javax.swing.*;

public class Sburb
{
public static void main (String[] args)
{
    JFrame frame = new JFrame ("Welcome to Sburb");
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    spirograph page = new spirograph();
    progressbar bar = new progressbar();

    frame.getContentPane().add(page);
    frame.getContentPane().add(bar);
    frame.pack();
    frame.setVisible(true);
    frame.setResizable(true);
    }
}

progressbar.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*; 

public class progressbar extends JPanel
{

JProgressBar current;
JTextArea out;
JButton find;
Thread runner;
int num = 1;

progressbar() 
{
    super();

    //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel pane = new JPanel();
    pane.setLayout(new FlowLayout());
    current = new JProgressBar(0, 2000);
    current.setStringPainted(false);
    pane.add(current);
    //setContentPane(pane);
}


public void iterate() {
    while (num < 2000) {
        current.setValue(num);
        try {
            Thread.sleep(300);
        } catch (InterruptedException e) { }
        num += 5;
    }
}

//    public static void main(String[] arguments) {
//        progressbar frame = new progressbar();
//        frame.pack();
//        frame.setVisible(true);
//        frame.iterate();
//   }
}

spirograph.java

import java.awt.Color;

import java.awt.FlowLayout;


import javax.swing.ImageIcon;

import javax.swing.JLabel;
import javax.swing.JPanel;


public class spirograph extends JPanel
{
private ImageIcon image;
private JLabel label;
private JLabel frame = new JLabel();
private JPanel panel = new JPanel();

 spirograph() 
{

    this.setOpaque(true);
    this.setBackground(Color.BLACK);

    setLayout(new FlowLayout());
    image = new ImageIcon(getClass().getResource("Gate.gif"));
    label = new JLabel(image);
    add(label);

    progressbar bar = new progressbar();
    }
}

我试图调用文件&#34; progressbar&#34;到了Sburb文件,但是当我这样做时,它只给我一个简单的JFrame(未修复):

http://imgur.com/1aAmPwJ

当我摆脱&#34; frame.getContentPane()。add(bar);&#34;在Sburb.java中,它给了我这个(固定的,种类的):

http://imgur.com/15aGtT2

我该如何解决这个问题?我到处都看了,但我仍然无法弄明白!我似乎也无法弄清楚如何在gif正下方对齐条形图。

1 个答案:

答案 0 :(得分:4)

frame.getContentPane().add(page);
frame.getContentPane().add(bar);

JFrame的内容窗格设置为BorderLayout,只能接受边框布局的任何一个中的一个组件限制。鉴于此处未提供任何约束,JRE将尝试将它们都放在CENTER

为此,以及其他各种原因,我建议忽略现有的内容窗格,将整个GUI(尽可能多的面板)安排到另一个面板中(让我们称之为ui)然后致电

frame.setContentPane(ui);