我正在尝试在JFrame中绘制一个字符串,但是它不起作用..请帮助

认识K。

我试图在按下按钮时显示一个字符串,但是它不起作用。我不知道问题是什么。我没有错误,但这并没有打扰我。我想我缺少基本的东西。请帮忙!!

//I'm trying to draw a string in the frame when a button is pressed, but it won't work..
//Can't figure out what the problem is.


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

class AppletTwo extends JFrame implements ActionListener
{

    JFrame frameOne;
    JButton btnOne;

    AppletTwo()
    {

        frameOne = new JFrame("frameOne");
        frameOne.setSize(320,240);
        frameOne.setLayout(new FlowLayout(FlowLayout.LEFT));
        frameOne.setVisible(true);
        frameOne.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        btnOne = new JButton("Print");
        btnOne.addActionListener(this);
        frameOne.add(btnOne);
    }

    public void actionPerformed(ActionEvent ae)
    {

        if(ae.getSource() == btnOne)
        {
            repaint();
        }
    }

    public void paint(Graphics g)
    {
        g.drawString("Never Works",150,150);
    }

    public static void main(String[] args)
    {

        AppletTwo frame1 = new AppletTwo();
    }
}
保罗·萨姆索塔

“我想我缺少基本的东西。”

是的,你是:

主要问题:

  • 您的类是JFrame覆盖该paint方法的组件但是,你创建的另一个实例JFrame,这是一个你setVisible来。请记住,您尚未在此框架上绘制任何内容。因此,您看到的是框架的新实例,而不是您正在为其绘制(并且从未设置为可见)的类框架。

其他问题:

  • 您应该始终super.paint[Component]paint[Component]覆盖致电

    @Override
    public void paint(Graphics g) {
        super.paint(g);
    }
    
  • 不要在像这样的顶层容器上油漆JFrame取而代之的是在JPanel上绘制,JComponent并重写paintComponentmethod和call super.paintComponent,然后将该组件添加到框架中。请参见执行自定义绘画

  • Swing应用程序应在事件分发线程(EDT)上运行。您可以通过将main代码包装在中来实现SwingUtilities.invokeLater(...)请参阅初始线程

    public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                AppletTwo frame1 = new AppletTwo();
            }
        }); 
    }
    
  • 通常,您总是希望添加组件后将框架设置为可见

其他说明:


更新

以上所有要点的示例。

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class SimpleDrawing {

    public SimpleDrawing() {
        final DrawingPanel panel = new DrawingPanel();

        final JTextField field = new JTextField(15);

        JButton button = new JButton("Change name");
        button.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {
                String someString = field.getText();
                if (!someString.isEmpty()) {
                    panel.setString(someString);
                }
            }
        });

        JPanel bottomPanel = new JPanel();
        bottomPanel.add(field);
        bottomPanel.add(button);

        JFrame frame = new JFrame();
        frame.add(panel);
        frame.add(bottomPanel, BorderLayout.SOUTH);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

    }

    public class DrawingPanel extends JPanel {
        private String someString = "Stackoverflow";

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawString(someString, 75, 75);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension (300, 100);
        }

        public void setString(String someString) {
            this.someString = someString;
            repaint();
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                new SimpleDrawing();
            }
        });
    }  
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我正在尝试在JFrame中绘制一个字符串,但是它不起作用..请帮助

来自分类Dev

请帮助我了解Boost :: Any

来自分类Dev

classCastException请以实际概念帮助我

来自分类Dev

放大阵列,请帮助我

来自分类Dev

请帮助我了解Boost :: Any

来自分类Dev

硬盘分区:请帮助我!:(

来自分类Dev

请帮助我了解数组

来自分类Dev

请帮助我:修改iframe内容

来自分类Dev

请帮助我摆脱这个问题

来自分类Dev

请帮助删除文本中的特定行

来自分类Dev

请帮助删除文本中的特定行

来自分类Dev

需要帮助,请从网址中删除部分

来自分类Dev

PHP文件中的错误-请帮助解决

来自分类Dev

请从码点号的IntStream一个字符串?

来自分类Dev

我正在实现拖放功能,请帮助我。

来自分类Dev

请帮助我理解这一行代码?

来自分类Dev

请帮助我了解Java中的Pusher websocket API

来自分类Dev

请帮助识别我在mysql查询中的错误

来自分类Dev

请帮助我了解AVL树中的LR旋转

来自分类Dev

请帮助我检查登录中的会话错误

来自分类Dev

请帮助我在js按钮的onclick函数中

来自分类Dev

我不知道错了,请帮助我

来自分类Dev

我不知道错了,请帮助我

来自分类Dev

我的代码有什么问题,请帮助我

来自分类Dev

请帮助我了解以下CSS代码

来自分类Dev

Javascript:请帮助我了解此功能

来自分类Dev

请帮助重建我的fstab!Ubuntu 12.04 LTS

来自分类Dev

请帮助我理解这个委托示例

来自分类Dev

请帮助我理解python类与实例变量