0

2 つの JFrames を持つクラスがあり、特定のフレームに線を引こうとしています。

以下のコードを試してみましたが、成功フレームである最初のフレームにしか表示されません。

また、成功フレームの他のすべてのコンポーネントの上に表示されるため、他のすべてのコンポーネントを作成します

コンポーネントが見えない。コンプ フレームには表示されません。

これを修正するにはどうすればよいですか。

これが私がこれまでに持っているコードです:

import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;

public class lineGUI{
public static void main(String []args){
Success s=new Success();
s.setVisible(true);
  }
}

class Success extends JFrame{

JPanel alas =new JPanel();
JFrame comp =new JFrame();
public Success(){
JPanel panel=new JPanel();
getContentPane().add(panel);
setSize(450,450);

JButton button =new JButton("press");
panel.add(button);

  comp.setSize(650,500);
  comp.setTitle("View Report");

  JRootPane compPane=comp.getRootPane();
  Container contePane=compPane.getContentPane();
  contePane.add(alas);


    ActionListener action =new ActionListener(){
      public void actionPerformed(ActionEvent e){
        if (e.getSource()==button){
          comp.setVisible(true);
        }
      }
    };
    button.addActionListener(action);

  JButton button2=new JButton("access");
  alas.add(button2);
 }

public void paint(Graphics g) {
comp.paint(g);
Graphics2D g2 = (Graphics2D) g;
Line2D lin = new Line2D.Float(100, 100, 250, 260);
g2.draw(lin);
  }
}
4

2 に答える 2

2

そこにはクレイジーなコードがあります。提案:

  • JFrame で直接描画しないでください。ただし、JPanel や JComponent 自体など、JComponent から派生したオブジェクトの paintComponent メソッドで描画します。
  • 別のコンポーネントの paint(...) メソッドで直接描画することは、コーシャではありません。クラス間で単純にデータを共有し、そのデータ (int) を使用して必要な場所に描画してみませんか。
  • 一度に複数の JFrame を GUI に表示させたいと思うことはめったにありません。通常、1 つのウィンドウがメイン ウィンドウ (JFrame) であり、JDialog などのダイアログ ウィンドウである他のウィンドウを所有することがよくあります。
  • グラフィックのチュートリアルを読んで、Swing グラフィックを行う正しい方法を学びます。
于 2012-05-26T20:26:58.647 に答える
0

2つのこと:

「comp」フレームに描画する場合は、そのフレームを明示的に拡張して、paintメソッドをオーバーロードする必要があります。現在、「Success」フレームのペイントメソッドをオーバーロードしています。この線comp.paint(g)は、comp(標準のJFrame)のpaintメソッドを使用して、「Success」フレームのGraphicsオブジェクトに描画しています。super.paint(g)代わりにそれを作成し、このペイント関数を独自のJFrameに配置して、そこからcompを作成することをお勧めします。

http://pastebin.com/ZLYBHpmj

(申し訳ありませんが、最初の投稿では、Stackoverflowにフォーマットについての不満をやめる方法を理解できませんでした)

于 2012-05-26T20:50:59.123 に答える