1

在我的源代码中,

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Object6 extends JFrame {
    JButton p = new JButton("Y");
    JButton n = new JButton("N");

    public Object6(){
        setSize(1280,800);
        setVisible(true);
        setLayout(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public void paint(Graphics g){
        p.setLocation(590,500);
        n.setLocation(590,550);
        add(p);
        add(n);
        p.setSize(100,50);
        n.setSize(100,50);
        g.drawString("Does statement 6 apply?", 100, 100);
    }
    public static void main(String[]args){
        new Object6();
    }
}

按钮“p”和字符串出现;但是,只有当我单击它应该在的空间时,才会出现按钮“n”。当我删除g.drawString("Does statement 6 apply?", 100, 100);时,两个按钮同时出现。

g.drawString("Does statement 6 apply?", 100, 100);当两个按钮同时出现时如何添加?

4

3 回答 3

3
  1. 您永远不应该从任何paint方法中修改 UI,这可能会导致该paint方法被一次又一次地调用......直到它占用 CPU 周期
  2. 您应该在构造函数中添加按钮
  3. 您应该适当使用布局管理器
  4. 在 Swing 中绘制由许多链接调用组成,这些调用累积起来以绘制最终输出。为了确保正确执行绘画,您必须调用super.paint
  5. 您应该避免覆盖paint顶级容器,paint通常应该避免覆盖。而是使用类似 a 的东西JPanel并覆盖它的paintComponent方法

看一眼

于 2013-10-27T09:39:20.960 回答
0

你的绘画方法应该是这样的......

public void paint(Graphics g){
    super.paint(g);
    g.drawString("Does statement 6 apply?", 100, 100);
}

我认为它解决了你的问题

于 2013-10-27T16:16:56.673 回答
-1

感谢所有回答的人。这是任何有同样问题的人的最终(现在工作)代码:

import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Object6 extends JFrame {
    JPanel a = new JPanel();
    JButton p = new JButton("Y");
    JButton n = new JButton("N");
    Color c = new Color(0x4BBCF8);
    JLabel b = new JLabel("Does statement 6 apply?");

    public Object6(){
        setVisible(true);                               
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(null);
        setSize(1280,800);
        setBackground(c);
        panel();
    }
    public void panel(){
        a.setLocation(540,600);
        a.setSize(200,50);
        add(a);
        a.setLayout(null);

        p.setLocation(0,0);
        n.setLocation(100,0);
        p.setSize(100,50);
        n.setSize(100,50);
        a.add(p);
        a.add(n);

        int e = b.getText().length();
        b.setLocation((1280-e*8)/2,100);
        b.setSize(8*e,16);
        add(b);
    }
    public static void main(String[]args){
        new Object6();
    }
}
于 2013-10-28T12:01:06.803 回答