Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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 尝试使用actionListener将字符串倒置_Java_Swing_Paint_Repaint - Fatal编程技术网

Java 尝试使用actionListener将字符串倒置

Java 尝试使用actionListener将字符串倒置,java,swing,paint,repaint,Java,Swing,Paint,Repaint,从我的课本上: “编写一个扩展JFrame并在用户单击按钮时倒置显示短语的应用程序。当用户再次单击按钮时,该短语将正常显示。” 目前,我有一个使用paint()方法和图形对象绘制的字符串。该字符串在突出显示的框架中可见,它是倒置的,位于面板的中间。我添加了我的按钮和actionListener,但我认为actionPerformed方法中的代码是错误的,因为我试图将负字体大小乘以-1,使其成为正字体大小,但当我重新绘制时,它似乎没有生效。定位的字符串移动到x=100 ad y=100,但字符串仍

从我的课本上: “编写一个扩展JFrame并在用户单击按钮时倒置显示短语的应用程序。当用户再次单击按钮时,该短语将正常显示。”

目前,我有一个使用paint()方法和图形对象绘制的字符串。该字符串在突出显示的框架中可见,它是倒置的,位于面板的中间。我添加了我的按钮和actionListener,但我认为actionPerformed方法中的代码是错误的,因为我试图将负字体大小乘以-1,使其成为正字体大小,但当我重新绘制时,它似乎没有生效。定位的字符串移动到x=100 ad y=100,但字符串仍然颠倒

任何形式的指导都是值得赞赏的

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
@SuppressWarnings("serial")
public class JUpsideDown extends JFrame implements ActionListener
{
    int x = 350;
    int y = 100;
    int fontSize = -26;
    Font font = new Font("Serif", Font.PLAIN, fontSize);
    JButton press = new JButton("Flip Text");
    String label = "Look at this text, it will flip!";

    public JUpsideDown()
    {
        setTitle("JUpsideDown");
        setLayout(new FlowLayout());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(press);
        press.addActionListener(this);
    }

    public void paint(Graphics g)
    {
        super.paint(g);
        g.setFont(font);
        g.drawString(label, x, y);
    }

    public void actionPerformed(ActionEvent e)
    {
        fontSize = fontSize * -1;
        x = 100;
        y = 100;
        repaint();
    }

    public static void main(String[] args) 
    {
        JUpsideDown frame = new JUpsideDown();
        frame.setSize(450, 200);
        frame.setVisible(true);

    }

}

您的逻辑是正确的,尽管您需要再次实例化一个新的
Font
对象,该对象将封装新的
fontsize
。这应该在
actionPerformed()
方法内单击按钮后执行。这样,应用程序的行为将是预期的

您可以在下面找到一个可能的解决方案:

public void actionPerformed(ActionEvent e)
    {
        fontSize = fontSize * -1;
        x = 100;
        y = 100;
        font = new Font("Serif", Font.PLAIN, fontSize); //added line
        repaint();
    }

您的逻辑是正确的,尽管您需要再次实例化一个新的
Font
对象,该对象将封装新的
fontsize
。这应该在
actionPerformed()
方法内单击按钮后执行。这样,应用程序的行为将是预期的

您可以在下面找到一个可能的解决方案:

public void actionPerformed(ActionEvent e)
    {
        fontSize = fontSize * -1;
        x = 100;
        y = 100;
        font = new Font("Serif", Font.PLAIN, fontSize); //added line
        repaint();
    }

您的字体实例不知道何时以及如何更改JUpsideDown类的fontSize变量……我认为使用负字体大小不会翻转文本,您需要通过负状态缩放
图形
上下文,这还需要提供额外的偏移来补偿。一般来说,您不希望覆盖顶级容器(如
JFrame
)的
paint
,它可能会导致无休止的问题,您应该从
JPanel
开始,并覆盖它的
paintComponent
方法,而不是使用负比例翻转
图形
上下文另一个解决方案是简单地围绕文本中心旋转
图形
上下文instead@MadProgrammer我用了负片字体来显示开始时把绳子倒过来。有没有办法通过在actionPerformed方法内部将textSize变量相乘来将其更改为正值?字体实例不知道何时以及如何更改JUpsideDown类的fontSize变量…我不认为使用负值字体大小会翻转文本,您需要通过负状态来缩放
图形
上下文,这也需要提供额外的偏移来补偿。一般来说,您不希望覆盖顶级容器(如
JFrame
)的
paint
,它可能会导致无休止的问题,您应该从
JPanel
开始,并覆盖它的
paintComponent
方法,而不是使用负比例翻转
图形
上下文另一个解决方案是简单地围绕文本中心旋转
图形
上下文instead@MadProgrammer我用了负片字体来显示开始时把绳子倒过来。有没有办法简单地将textSize变量在actionPerformed方法内部相乘,将其改为正数?
font=new font(“Serif”,font.PLAIN,fontSize)//添加了行
,我想我尝试了类似的方法,但我尝试实例化一个名为“Font”
Font-Font=new-Font(“Serif”,Font.PLAIN,fontSize”)的新字体对象//添加了一行
我认为这是我之前所做的,显然它不起作用,因为font对象被本地化为actionPerformed方法。谢谢大家!<代码>字体=新字体(“衬线”,font.PLAIN,fontSize)//添加了行,我想我尝试了类似的方法,但我尝试实例化一个名为“Font”
Font-Font=new-Font(“Serif”,Font.PLAIN,fontSize”)的新字体对象//添加了一行
我认为这是我之前所做的,显然它不起作用,因为font对象被本地化为actionPerformed方法。非常感谢。