JViewportはJPanelと連携しますが、JPanelを継承する新しいクラスを作成するとJViewportがプログラムによって無視されるように見えます。私は何も悪いことをすれば私は知らないので、これは私が行ってテストされ、今でも同じ結果を得る:JViewportはJPanelの派生クラス用のビューポートを生成しません
public class panel extends JPanel
{
public panel()
{
super();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.BLUE);
g.drawString("Hello World", 50, 50);
g.setColor(Color.RED);
g.fillRect(50,50,100,100);
g.setColor(Color.BLACK);
g.fillOval(100, 100, 50, 50);
}
}
public class test extends JFrame
{
private panel p;
public void init()
{
this.setSize(1000, 1000);
this.setLayout(new BorderLayout());
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
p = new panel();
p.setOpaque(false);
JViewport v = new JViewport();
v.setViewSize(new Dimension(200,200));
v.setViewPosition(new Point(2000,2000));
v.setView(p);
this.add(v,BorderLayout.CENTER);
}
public test()
{
init();
}
public static void main(String[] args)
{
test t = new test();
}
}
それは塗装のJPanelの一部を表示すると仮定しますが、JFrameのウィンドウだけで全体を表示しますJPanel。したがって、私が間違っていたか、JViewportがこの目的のために構築されていないかはわかりません。後者の場合は、誰でも回避策を提案できれば幸いです。
おかげ
+! 'paintComponent(...)をオーバーライドすると、常にgetPreferredSize()もオーバーライドする方が好きです:-) –