我一直在为我创建的这些脚本带来一些(非常烦人的)麻烦。
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(未修复):
当我摆脱&#34; frame.getContentPane()。add(bar);&#34;在Sburb.java中,它给了我这个(固定的,种类的):
我该如何解决这个问题?我到处都看了,但我仍然无法弄明白!我似乎也无法弄清楚如何在gif正下方对齐条形图。
答案 0 :(得分:4)
frame.getContentPane().add(page);
frame.getContentPane().add(bar);
JFrame
的内容窗格设置为BorderLayout
,只能接受边框布局的任何一个中的一个组件限制。鉴于此处未提供任何约束,JRE将尝试将它们都放在CENTER
。
为此,以及其他各种原因,我建议忽略现有的内容窗格,将整个GUI(尽可能多的面板)安排到另一个面板中(让我们称之为ui
)然后致电
frame.setContentPane(ui);