JFrame
メソッドはありませんpaintComponent(Graphics g)
。@Override
注釈を追加すると、コンパイル時エラーが発生します。
1) 使用JPanel
および上書き(ビアドpaintComponent
に追加するよりJPanel
も)JFrame
JFrame#add(..)
getPreferredSize()
2) Graphics オブジェクトの描画に適合する正しい s を返すようにオーバーライドしDimension
ます。そうしないと、JPanel
コンポーネントのないサイズが 0,0として表示されません。
setSize
3) 呼び出してはいけません ...すべてのコンポーネントを追加した後、可視に設定する前に、JFrame
正しいLayoutManager
and/or overridegetPrefferedSize()
を使用して呼び出しますpack()
JFrame
4) Concurrency in Swing、特にEvent Dispatch Threadについて読んでください。
5) ウォッチクラスの命名スキームは大文字で始まり、その後の新しい単語の最初の文字はすべて大文字にする必要があります
6) またextend JFrame
、変数がありますJFrame
か? を取り除いて変数をextend JFrame
保持します。これは、2 つの s が必要ないためです。機能を追加しない限り、変数を拡張することはお勧めできません。JFrame
JFrame
JFrame
上記の修正を加えたコードは次のとおりです(画質が悪いですが、サイズを変更する必要があったか、800x600 になりました)。

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Polygon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class JRisk {
private JFrame mainMap;
private Polygon poly;
public JRisk() {
initComponents();
}
private void initComponents() {
mainMap = new JFrame();
mainMap.setResizable(false);
mainMap.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
int xPoly[] = {150, 250, 325, 375, 450, 275, 100};
int yPoly[] = {150, 100, 125, 225, 250, 375, 300};
poly = new Polygon(xPoly, yPoly, xPoly.length);
JPanel p = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
g.drawPolygon(poly);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(800, 600);
}
};
mainMap.add(p);
mainMap.pack();
mainMap.setVisible(true);
}
/**
* @param args
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new JRisk();
}
});
}
}
あなたのコメントによると:
多くのポリゴンを含むマップを準備しています。昨日、JFrame で JPanel を使用し、MouseListener を使用してマウスがポリゴンの内側にあるかどうかを確認しようとしました。後で、mouseListener が誤った応答をしたことがわかりました (マウスがポリゴンの内側ではなく、ポリゴンの内側にあるかのように動作するように)。だから私はJPanelを削除し、それからそれは働いた
クリックがポリゴン内にあるかどうかを確認するために、更新されたコードMouseAdapter
とオーバーライドされたコードを次に示します。mouseClicked
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Polygon;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class JRisk {
private JFrame mainMap;
private Polygon poly;
public JRisk() {
initComponents();
}
private void initComponents() {
mainMap = new JFrame();
mainMap.setResizable(false);
mainMap.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
int xPoly[] = {150, 250, 325, 375, 450, 275, 100};
int yPoly[] = {150, 100, 125, 225, 250, 375, 300};
poly = new Polygon(xPoly, yPoly, xPoly.length);
JPanel p = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
g.drawPolygon(poly);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(800, 600);
}
};
MouseAdapter ma = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent me) {
super.mouseClicked(me);
if (poly.contains(me.getPoint())) {
System.out.println("Clicked polygon");
}
}
};
p.addMouseListener(ma);//add listener to panel
mainMap.add(p);
mainMap.pack();
mainMap.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new JRisk();
}
});
}
}