//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», но с этим кодом я получаю пустой кадр. До сих пор единственный раз, когда изображение в JLabels оказалось, был, когда я добавил его непосредственно к 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 * делает работа *. Я делаю это все время. Я быстро просмотрю ваш код, но в то же время вам нужно выполнить ** все ** [код Swing в теме Dispatch Thread.] (Http://docs.oracle.com/javase/tutorial/ uiswing/concurrency/dispatch.html) Начните с этого изменения. – markspace
JLaywredPane по умолчанию не имеет LayoutManager, если вы его не задали, вам нужно установить размер компонентов, которые вы добавляете к нему. – MadProgrammer