2016-06-28 7 views
0

JavaのEclipseをSwing Designerで使用していて、JPanelにグラフィックを表示しようとしています。 私はかなり素人なプログラマーで、グラフィックスコーディングには新しくありません。JavaがJPanelでグラフィックスを表示できない

基本的に、2つのJPanel(ステージとセッティング)を持つJFrameがあります。 Surfaceのクラスの中にpaintTestというメソッドがあります。このメソッドはステージJPanelに文字列 'This is a test'を描画する必要があります。 コードを実行するとエラーは発生しません。 ご協力いただければ幸いです。

下記のコードをご覧ください。

import java.awt.Color; 
import java.awt.Component; 
import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.BevelBorder; 
import javax.swing.JLabel; 
import java.awt.Font; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Window; 



public class TestSimulator extends JFrame{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    private JFrame frmTestSimulation; 
    private JPanel stagePanel = new JPanel(); 
    private JLabel stageLabel = new JLabel("Stage"); 
    private JPanel settingsPanel = new JPanel(); 
    private JLabel settingsLabel = new JLabel("Settings"); 


    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        TestSimulator window = new TestSimulator(); 
        window.frmTestSimulation.setVisible(true); 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the application. 
    */ 
    public TestSimulator() { 
     initialize(); 
    } 


    /** 
    * Initialize the contents of the frame. 
    */ 
    private void initialize() { 
     frmTestSimulation = new JFrame(); 
     frmTestSimulation.setTitle("WAPP Simulation"); 
     frmTestSimulation.setBounds(100, 100, 727, 500); 
     frmTestSimulation.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frmTestSimulation.getContentPane().setLayout(null); 

     //JPanel stagePanel = new JPanel(); 
     stagePanel.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null)); 
     stagePanel.setBounds(262, 11, 439, 439); 
     frmTestSimulation.getContentPane().add(stagePanel); 
     stagePanel.setLayout(null); 
     stagePanel.add(new Surface()); //Show the string 'This is a test' 

     //JLabel stageLabel = new JLabel("Stage"); 
     stageLabel.setFont(new Font("Tahoma", Font.BOLD, 14)); 
     stageLabel.setBounds(183, 11, 53, 34); 
     stagePanel.add(stageLabel); 

     //JPanel settingsPanel = new JPanel(); 
     settingsPanel.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null)); 
     settingsPanel.setBounds(10, 11, 242, 439); 

     frmTestSimulation.getContentPane().add(settingsPanel); 
     settingsPanel.setLayout(null); 

     //JLabel settingsLabel = new JLabel("Settings"); 
     settingsLabel.setFont(new Font("Tahoma", Font.BOLD, 14)); 
     settingsLabel.setBounds(78, 11, 71, 22); 
     settingsPanel.add(settingsLabel); 

    } 

    class Surface extends JPanel{ 

     public void paintTest(Graphics g) 
     { 
      Graphics2D g2d = (Graphics2D) g; 
      g2d.drawString("This is a test", 50, 50); 

     } 

     @Override 
     public void paintComponent(Graphics g) { 

      super.paintComponent(g); 
      paintTest(g); 
     } 



    } 
} 
+2

ヌルレイアウトを避けることをお勧めします。ニーズに最も適した[レイアウトマネージャ](https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html)を選択し、ネストすることができることを覚えておいてください子コンポーネント内のレイアウト – copeg

+0

ありがとうcopeg。私はテストとしてBox Layoutに変更しました。私は今、文字列を見ることができます。カントはそれを信じます。少なくとも4時間それがあった。 – RayG

+0

@copeg arr、あなたは私にそれを打つ、私はしばらくの間、デバッガーと苦労していた – Jezor

答えて

3

stagePanelにはレイアウトがないため、その中の1つのコンポーネントだけが印刷されます。

stagePanel.setLayout(null); 

stagePanel.setLayout(new GridLayout(1, 2)); 

に変更し、それは、Swingでのレイアウトの詳細については、this websiteを参照してください

image of the resulting window

ようなものを表示しなければならないとthis answerにカスタムの表示についての詳細を学ぶためにJPanelsのもの

関連する問題