JFrame油漆不会覆盖

时间:2013-12-27 15:42:38

标签: java swing jframe paint

执行流程图符号。 但是JFrame paint方法对这种方法不起作用。

package floating;
import designs.*;   //mydesings for executing flow chart Symbols
import java.awt.*;
import javax.swing.*;

public class Test extends JFrame
{
    boolean START,PASS;   //for using
    int SPEED=1;

    JSlider jSlider1 = new javax.swing.JSlider();
    JSeparator js=new JSeparator();
    JToggleButton jToggleButton1 = new javax.swing.JToggleButton("START");
    JToggleButton jToggleButton2 = new javax.swing.JToggleButton("PASS");

    Test(String a)
    {
        JFrame jf=new JFrame(a);
        Dimension dim=Toolkit.getDefaultToolkit().getScreenSize();
        jf.setSize(dim.width,dim.height-30);
        jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE); 

        jToggleButton1.setLocation((dim.width/2)+30,25);
        jToggleButton1.setSize(100,30);
        jToggleButton1.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                jToggleButton1ItemStateChanged(evt);
            }
        });

        jToggleButton2.setLocation((dim.width/2)+50+100,25);
        jToggleButton2.setSize(100,30);
        jToggleButton2.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                jToggleButton2ItemStateChanged(evt);
            }
        });

        js.setOrientation(SwingConstants.VERTICAL);
        js.setForeground(Color.red);
        js.setLocation(dim.width/2,0);
        js.setPreferredSize(dim);
        js.setSize(10,dim.height);
        jf.add(js);

        jSlider1.setLocation(dim.width-300,20);
        jSlider1.setSize(250,50);
        jSlider1.setToolTipText("Set to Seconds");
        jSlider1.setMinimum(1);jSlider1.setMaximum(5);jSlider1.setMajorTickSpacing(1);
        jSlider1.setMinorTickSpacing(1);jSlider1.setValue(1);
        jSlider1.setPaintLabels(true);
        jSlider1.setPaintTicks(true);
        jSlider1.setPaintTrack(true);
        jSlider1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jSlider1MouseClicked(evt);
            }
        });

        jf.add(jSlider1);  
        jf.add(jToggleButton1);
        jf.add(jToggleButton2);

        jf.setLayout(null);
        jf.setVisible(true); 
    }

    public void jToggleButton1ItemStateChanged(java.awt.event.ItemEvent evt) 
    {
        if(jToggleButton1.getActionCommand()=="START")
        {
            System.out.printf(jToggleButton1.getText());
            jToggleButton1.setText("STOP");
            this.START=true;
            System.out.println(this.START);
        }
        else
        {
            System.out.printf(jToggleButton1.getText());
            jToggleButton1.setText("START");
            this.START=false;
            System.out.println(this.START);
        }
    }
    public void jToggleButton2ItemStateChanged(java.awt.event.ItemEvent evt) 
    {
        if( jToggleButton2.getActionCommand()=="PASS")
        {
            System.out.printf(jToggleButton2.getText());
            jToggleButton2.setText("RESUME");
            this.PASS=true;
            System.out.println("   "+this.PASS);
        }
        else
        {
            System.out.printf(jToggleButton2.getText());
            jToggleButton2.setText("PASS");
            this.PASS=false;
            System.out.println( "  " +this.PASS);
        }
    }
    private void jSlider1MouseClicked(java.awt.event.MouseEvent evt) 
    {

       this.SPEED=jSlider1.getValue();
       System.out.println(SPEED);
    }
    @Override
    public void paint(Graphics g) //testing paint method
    {
        super.paint(g);
        g.drawLine(10, 20, 50, 70);
        repaint();
    }
    public static void main(String args[])
    {
        Test a=new Test("Test");
    } 
}

2 个答案:

答案 0 :(得分:2)

Test类扩展了JFrame。因此,如果要使用重写的paint方法,则必须创建Test类的对象。并使其成为setVisible(true)

相反,您正在Test的构造函数中创建另一个JFrame对象。不要创造它。 Test本身的对象是一个JFrame。将所有组件添加到Test对象而不是JFrame对象(jF)。

希望这有帮助。

答案 1 :(得分:1)

不要从绘画方法调用repaint()。这将导致无限循环。

通过覆盖JPanel(或JComponent)的paintComponent()方法完成自定义绘制,然后将面板添加到框架中。阅读Custom Painting上Swing教程中的部分以获取更多信息和示例。从教程中的示例开始,进行更改,以便更好地设计类。

不要使用“==”进行字符串比较。使用equals(...)方法。

此外,将来,当您提出问题时,请发布适当的SSCCE。你的问题是关于绘画,所以你发布的大部分代码与问题无关。