我创建的这些脚本遇到了一些(非常烦人的)麻烦。
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();
}
}
我正在尝试将文件“ progressbar”调用到Sburb文件,但是当我这样做时,它只是给了我这个简单的JFrame(不固定):
http://imgur.com/1aAmPwJ
当我摆脱“ frame.getContentPane()。add(bar);”在Sburb.java中,它给了我这个(固定的):
http://imgur.com/15aGtT2
我该如何解决?我到处都看过了,但还是想不起来!我似乎也无法弄清楚如何在gif下方直接对齐栏。
最佳答案
frame.getContentPane().add(page);
frame.getContentPane().add(bar);
JFrame
的内容窗格是BorderLayout
的集合,它只能接受任何一种边界布局约束中的一个组件。鉴于此处未提供任何约束,JRE将尝试将它们都放入CENTER
中。由于这个原因以及其他各种原因,我建议您忽略现有的内容窗格,将整个GUI(包括其组成的多个面板)安排到另一个面板中(我们称之为
ui
),然后调用frame.setContentPane(ui);