//TbsgMain.java:
package tbsg;
import javax.swing.JFrame;
public class TbsgMain {
public static void main(String[] args) {
TbsgEngine engine = new TbsgEngine();
JFrame mainFrame = new TbsgFrame(engine);
mainFrame.setVisible(true);
}
}
//TbsgFrame.java
package tbsg;
class TbsgFrame extends JFrame {
private TbsgEngine engine;
private JLayeredPane mainScreen;
private JLabel label1;
public TbsgFrame(TbsgEngine eng) {
engine = eng;
setTitle("TBSG");
setLocation(10, 10);
setPreferredSize(new Dimension(600, 600));
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
mainScreen = new JLayeredPane();
label1 = new JLabel();
label1.setIcon(new ImageIcon(new ImageIcon(getClass().getResource("imgs/hex."
+ "png")).getImage().getScaledInstance(115, 100, Image.SCALE_SMOOTH)));
mainScreen.add(label1, 0);
this.add(mainScreen);
this.pack();
}
}
我正在做的分配,這將需要多個不同的擺動容器和組件(JPanel的,JLayeredPane的,一個JLabel,JButton的,等等)被放置內海誓山盟並最終調用JFrame中內「mainFrame」,但有了這個代碼,我只能得到一個空框架。迄今爲止唯一一次在中的JLabel形象出現,是當我直接添加它到JFrame,像這樣:嵌套擺動容器不顯示
//TbsgFrame.java
package tbsg;
class TbsgFrame extends JFrame {
private TbsgEngine engine;
private JLabel label1;
public TbsgFrame(TbsgEngine eng) {
engine = eng;
setTitle("TBSG");
setLocation(10, 10);
setPreferredSize(new Dimension(600, 600));
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
label1 = new JLabel();
label1.setIcon(new ImageIcon(new ImageIcon(getClass().getResource("imgs/"
+ "hex.png")).getImage().getScaledInstance(115, 100, Image.SCALE_SMOOTH)));
this.add(label1);
this.pack();
}
}
我怎麼能得到的JPanel(以及後來的其他部件)出現?任何幫助真的會被讚賞。
Nest JComponents * does work *。我一直這樣做。我將快速瀏覽一下你的代碼,但是同時你需要執行** all ** [Event Dispatch Thread上的Swing代碼。](http://docs.oracle.com/javase/tutorial/ uiswing/concurrency/dispatch.html)從那個改變開始。 – markspace 2014-10-26 20:27:54
JLaywredPane在默認情況下沒有LayoutManager,除非您提供一個LayoutManager,您需要設置添加到其中的組件的大小 – MadProgrammer 2014-10-26 20:40:04