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);
}
}
}
ヌルレイアウトを避けることをお勧めします。ニーズに最も適した[レイアウトマネージャ](https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html)を選択し、ネストすることができることを覚えておいてください子コンポーネント内のレイアウト – copeg
ありがとうcopeg。私はテストとしてBox Layoutに変更しました。私は今、文字列を見ることができます。カントはそれを信じます。少なくとも4時間それがあった。 – RayG
@copeg arr、あなたは私にそれを打つ、私はしばらくの間、デバッガーと苦労していた – Jezor