Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在扩展JFrame的类中的另一个JFrame上绘制线_Java_Swing_Jframe_Graphics2d - Fatal编程技术网

Java 在扩展JFrame的类中的另一个JFrame上绘制线

Java 在扩展JFrame的类中的另一个JFrame上绘制线,java,swing,jframe,graphics2d,Java,Swing,Jframe,Graphics2d,我有一个有两个JFrames的类,我试图在一个特定的框架上画一条线 我尝试了下面的代码,但它只出现在第一个帧中,即成功帧中 它也出现在成功框架的所有其他组成部分之上,从而使所有其他组成部分 组件不可见。它不会出现在comp框中 我该如何纠正这一点 以下是我目前掌握的代码: import javax.swing.*; import java.awt.*; import java.awt.geom.*; import java.awt.event.*; public class lineGUI{

我有一个有两个JFrames的类,我试图在一个特定的框架上画一条线

我尝试了下面的代码,但它只出现在第一个帧中,即成功帧中

它也出现在成功框架的所有其他组成部分之上,从而使所有其他组成部分

组件不可见。它不会出现在comp框中

我该如何纠正这一点

以下是我目前掌握的代码:

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);
  }
}

你有一些疯狂的代码。建议:

  • 不要直接在JFrame中绘制,而是在从JComponent派生的对象(如JPanel或JComponent本身)的paintComponent方法中绘制
  • 直接在另一个组件的paint(…)方法中绘制的图形根本不符合犹太规范。为什么不在类之间共享数据,并在需要的地方使用数据(INT)绘制呢
  • 您很少希望GUI一次显示多个JFrame。通常一个窗口是主窗口(JFrame),它通常拥有任何其他窗口,这些窗口将是对话框窗口,例如JDialogs
  • 阅读图形教程,学习正确的Swing图形制作方法
    • 两件事:

      如果要在“comp”帧中绘制,则应显式扩展该帧以重载其绘制方法。现在,您正在重载“成功”框架的绘制方法。线条
      comp.paint(g)
      使用comp(标准JFrame)的绘制方法在“Success”框架的图形对象上绘制。您可能希望将其转换为
      super.paint(g)
      ,然后将此paint函数放入它自己的JFrame中并从中创建comp


      (很抱歉,第一篇文章,无法找出如何让Stackoverflow停止抱怨格式)

      可能重复See请不要建议他直接在JFrame中绘制。Swing图形教程的建议和Swing专家都强烈反对这一建议。