Java 在扩展JFrame的类中的另一个JFrame上绘制线
我有一个有两个JFrames的类,我试图在一个特定的框架上画一条线 我尝试了下面的代码,但它只出现在第一个帧中,即成功帧中 它也出现在成功框架的所有其他组成部分之上,从而使所有其他组成部分 组件不可见。它不会出现在comp框中 我该如何纠正这一点 以下是我目前掌握的代码: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{
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专家都强烈反对这一建议。