基本的に私はJavaでスレッドを理解しようとしています。私は、外部クラスから2つのJPanelを含むメインのJFrameクラスを作成し、それは2番目のパネルからのメッセージです。それまで私は最初の外部パネルを作成しただけで、そこに問題が始まりました! 「ロードされた」ように見えるが、それは。だからここ がメインクラスです(のSystem.outラインを参照)が正しく表示されません外部JPanelクラスは、メインJFrameクラスで正しく表示されません
package com.maybee.gui;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.LineBorder;
public class Maybee extends JFrame implements Runnable
{
public JFrame maynFrame = null;
public JPanel contentPanel = null;
public SimPanel simPanel = null;
public int screenWidth = 0;
public int screenHeight = 0;
public Maybee()
{
}
private void init()
{
System.out.println("In Inint");
maynFrame = new JFrame("Maybee");
maynFrame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
screenWidth = gd.getDisplayMode().getWidth();
screenHeight = gd.getDisplayMode().getHeight();
maynFrame.setPreferredSize(new Dimension(screenWidth,screenHeight - 100));
maynFrame.setContentPane(getContentPanel());
maynFrame.setVisible(true);
maynFrame.pack();
}
public JPanel getContentPanel()
{
if (contentPanel == null)
{
contentPanel = new JPanel();
contentPanel.setPreferredSize(new Dimension(screenWidth,screenHeight - 100));
contentPanel.setBorder(new LineBorder(Color.BLUE));
contentPanel.setBackground(Color.RED);
contentPanel.setLayout(new BorderLayout());
contentPanel.add(getSimPanel(),BorderLayout.CENTER);
}
return contentPanel;
}
public SimPanel getSimPanel()
{
if(simPanel == null)
{
simPanel = new SimPanel(this);
}
return simPanel;
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
System.out.println("Start");
Maybee maybee = new Maybee();
maybee.run();
}
});
}
public void run()
{
init();
}
}今
と
第一の外部のJPanelクラスpackage com.maybee.gui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
public class SimPanel extends JPanel
{
public Maybee localMaybee = null;
public JPanel simPanel = null;
private JButton btn;
public SimPanel(Maybee interMaybee)
{
localMaybee = interMaybee;
init();
}
public void init()
{
simPanel = new JPanel();
simPanel.setLayout(new BorderLayout());
simPanel.setPreferredSize(new Dimension(localMaybee.screenWidth/4,localMaybee.screenHeight - 100));
simPanel.setBackground(Color.GREEN);
simPanel.add(getBtn(),BorderLayout.CENTER);
simPanel.setVisible(true);
System.out.println("IN SIM" + localMaybee.screenWidth);
}
public JButton getBtn()
{
if(btn == null)
{
btn = new JButton("ENDE");
btn.setSize(70, 20);
btn.setForeground(Color.YELLOW);
btn.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
}
});
}
return btn;
}
}
私は何が欠けていますか?
多くの感謝!
は、それらの瞬間をテストすることはできませんが:1)( 'パックを呼び出し);' 'のsetVisible(true)を前に、' 2)あなたは 'のJFrameを使用して' Maybee'クラス(やないで 'JFrame'を拡張しています。 '、あなたが' JFrame'部分を拡張を削除した場合、それは安全ですので、3) 'のsetSize()'、[は|最大| setPreferred呼び出さないのminimumSize()]コールしないでください(https://stackoverflow.com/questions/7229226 /べき-I-避け-利用の-setpreferredmaximumminimumsize-メソッド・イン・ジャワ-SWI)の方法のいずれか、代わりに上書き 'のgetPreferredSize() 'メソッド(または最大値/最小値)。 – Frakcool
こんにちはフラククール、それは速かった。残念ながら(1)は機能せず、(2)はエラーを出します。 (3)私はかなり理解していませんでした。ありがとう – stafford3105