- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这对某些人来说可能是一个非常明显的问题,但我无法弄清楚。我是 Eclipse 新手,只使用 Dr.Java 进行编程。我正在创建一个疯狂的库程序,用户必须输入名词、形容词、名称、数字,最后它将显示在故事中。
用户输入所有必需的信息后,我希望在 jPanel 中打开完成的故事。我不知道如何将文本添加到 jPanel。(我希望在用户输入所有信息后以 c. 代码开头的文本显示在窗口中)代码如下:
import java.util.Scanner;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MadLibs{
public static void Action1 ()
{
JFrame frame = new JFrame("Mad Libs");
// Add a window listener for close button
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Scanner input = new Scanner(System.in);
System.out.println("Male Friend:");
String maleFriend = input.nextLine();
System.out.println("Adjective:");
String adjective1 = input.nextLine();
System.out.println("Past Tense Verb:");
String pastTenseVerb1 = input.nextLine();
System.out.println("Past Tense Verb 2:");
String pastTenseVerb2 = input.nextLine();
System.out.println("Large Number:");
String largeNumber = input.nextLine();
System.out.println("Famous Female:");
String famousFemale = input.nextLine();
System.out.println("Adverb:");
String adverb = input.nextLine();
System.out.println("Place:");
String place = input.nextLine();
System.out.println("Body Part(singular):");
String bodyPart = input.nextLine();
System.out.println("Large Number:");
String largeNumber2 = input.nextLine();
System.out.println("Verb ending with -ing");
String ingEnding1 = input.nextLine();
System.out.println("Singular noun:");
String singularNoun = input.nextLine();
System.out.println("Plural Noun:");
String pluralNoun = input.nextLine();
// This is an empty content area in the frame
JLabel jlbempty = new JLabel("");
jlbempty.setPreferredSize(new Dimension(600, 800));
frame.getContentPane().add(jlbempty, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
//The story I want displayed on the jPanel:
/*
c.println("The Great Dough Disaster");
c.println("\nLast summer, my friend "+ maleFriend + " got a job at the " + adjective1 +" Pastry Shop. For the first few");
c.println("weeks, he " + pastTenseVerb1 + " the floors, " + pastTenseVerb2 + " on the shelves, and unloaded " + largeNumber + " pound sacks");
c.println("of flour from the delivery trucks.\n");
c.println("Finally, "+famousFemale+", the owner, told "+maleFriend+" that she would teach him to make bread. Now,");
c.println("pay attention, "+maleFriend+",” she said every day. “I'll make the first batch of dough. Then you");
c.println("can make the next batch while I go to "+place+".\n");
c.println("Poor "+maleFriend+"! He had a habit of letting his "+bodyPart+" wander. When " +famousFemale+ " left for "+place);
c.println("he started to mix the ingredients. “Let me see,” he said. “I think she put in "+largeNumber2);
c.println("packages of yeast.”\n");
c.println("A short while later, the dough started "+ingEnding1+". It kept on "+ingEnding1+". "+maleFriend+" tried to");
c.println("cover it with a(n) "+singularNoun+", but the dough wouldn't stop "+ingEnding1+". It was everywhere! ");
c.println("“What can I do?” thought "+maleFriend+".\n");
c.println("Just then, Tyana returned from toronto. “"+maleFriend+"” she screamed. “What have you done?”");
c.println("“It's not my fault,” cried "+maleFriend+". “The dough just started "+ingEnding1+" and wouldn't stop.”");
c.println(famousFemale + " had to let him go. Now "+maleFriend+" has a job making "+singularNoun+". I don't think he'll ever");
c.print("eat bread again, let alone make it.");
*/
}
public static void main(String []args){
Action1();
}
}
另外,我对 jPanel 的工作原理有点困惑。我发现了很多在 jPanel 上显示内容的方法,但我不知道应该使用哪一种。
最佳答案
我立即想到了两种方法来做到这一点。
第一个更简单,那就是使用paintComponent(Graphics)方法。每当程序认为需要重新绘制对象时,例如最小化和 ermmmm 取消最小化包含 jpanel 的窗口,就会自动调用此方法。
这是一个简单的例子...
import javax.swing.JPanel;
import java.awt.Graphics;
import java.lang.Override; //for @Override
class yourClass extends JPanel { //yourClass is the JPanel
@Override //if you aren't overriding correctly this makes the compiler tell you
protected void paintComponent(Graphics gr){
super.paintComponent(gr);
gr.drawString("string literal or a string variable", 0,10);
}
}
代码解释...
super.paintComponent(gr);重写时应始终使用 super 命令,在这种情况下,您将重写 JPanel 的 PaintComponent 方法,因此请按照所示操作。这还可以实现增量绘制(正如我所说的),这意味着程序不会将屏幕绘制成白色,然后绘制它要执行的操作。所以你可以画一个黑框,一分钟后画一个红框,黑框不会消失。
gr.drawString(String strText,int x,int y); Graphic类的drawString方法。图形gr是程序通过一堆隐藏的方法创建的。所以不用担心创建它,只需将它放在paintComponent参数中,然后让程序调用paintComponent即可。
对于drawString命令,x和y是坐标,我把y设置为10,因为根据我的经验,该方法按以下方式工作:从坐标(x,y)(这是相对于JPanel的),绘制到向左、向上。因此,如果 y 为 0,您的文本将从 JPanel 中绘制出来。这意味着您将看不到它,因为在 JPanel 之外绘制的任何内容都不会出现。 (具体原因我也不知道)
这是使用paintComponent,如果你使用循环来绘制每条线,它可以有效地工作;因为drawString绘制一条线。这比下一个解决方案简单得多。
下一个解决方案是使用布局。如果你想一排一排地绘制每一行,每次向下一行,我会推荐 gridLayout(rows, columns)。如果您有 20 行文本,该方法将需要 new GridLayout(20, 1);
这个想法是计算行数和列数。
. Column 1
第 1 行
第 2 行
第 3 行
等等
GridLayout 的问题是您需要一个对象来保存每个字符串(在这种情况下,我推荐 JLabel)。
您还需要启用增量绘制(或者我非常怀疑),这意味着创建一个扩展 JLabel 的类。
最后,您还需要将 JLabel 作为子项添加到 JPanel
JPanel.add(JLabel);
尽管您已经使用了一些布局内容,但这可能并不那么难。
举个例子...
import java.awt.GridLayout;
import java.awt.Graphics;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JFrame;
import java.lang.Override;
class YourMainClass {
static JFrame mainFrame;
static YourJLabel clsLabel;
static JPanel pnlJPanel;
public static void main(String[]args){
mainFrame = new JFrame("Testing"); //initialize, and set size the frame
mainFrame.setSize(500,500);
pnlJPanel = new JPanel();//initialize our panel
pnlJPanel.setLayout(new GridLayout(3,1));//set its layout to gridlayout, with grid of 3 rows and 1 column
clsLabel = new YourJLabel(); //create a jlabel, add some text to it, then add it to the jpanel
clsLabel.setText("some");
pnlJPanel.add(clsLabel);
clsLabel = new YourJLabel();
clsLabel.setText("Text");
pnlJPanel.add(clsLabel);
clsLabel = new YourJLabel();
clsLabel.setText("drawn");
pnlJPanel.add(clsLabel);
mainFrame.add(pnlJPanel);//add the jpanel to the frame
mainFrame.pack(); //believe you already know these two lines
mainFrame.setVisible(true);
}
}
class YourJLabel extends JLabel {
YourJLabel(){
super();
setOpaque(true); //going on memory, by default jlabels opaque is false, or transparent
}
protected void paintComponent(Graphics gr){
super.paintComponent(gr);
}
}
这个例子的作用是:
使用布局时,一切都与其父级相关。
请注意,我们无法再访问前两个 JLabel,如果您想在使用类实例时访问它们,则必须将实例存储在从您那里获取它们的位置。存储它们的最佳位置是数组。一个简单的例子... YourJLabel[] aryJLabel = new YourJLabel[3];
[3]决定了数组的大小,一旦创建就无法更改。 YourJLabel 上的 [] 表示您正在创建 YourJLabel 数组。
关于java - 如何在 Java jPanel 上打印一些文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37555967/
表架构 DROP TABLE bla; CREATE TABLE bla (id INTEGER, city INTEGER, year_ INTEGER, month_ INTEGER, val I
我需要拆分字符串/或从具有以下结构的字符串中获取更容易的子字符串。 字符串将来自 window.location.pathname 或 window.location.href,看起来像 text/n
每当将对象添加到数组中时,我都会尝试更新 TextView ,并在 TextView 中显示该文本,如下所示: "object 1" "object 2" 问题是,每次将新对象添加到数组时,它都会覆盖
我目前正在寻找使用 Java 读取网站可见文本并将其存储为纯文本字符串的方法。 换句话说,我想转换成这样: Hello stupid World进入“ Hello World ” 或者类似的东西 Un
我正在尝试以文本和 HTML 格式发送电子邮件,但无法正确发送正确的 header 。特别是,我想设置 Content-Type header ,但我找不到如何为 html 和文本部分单独设置它。 这
我尝试了上面的代码,但我无法绑定(bind)文本,我怎样才能将资源内部文本 bloc
我刚刚完成了 Space Shooter 教程,由于没有 GUIText 对象,所以我创建了 UI.Text 对象并进行了相应的编码。它在统一播放器中有效,但在构建 Web 应用程序后无效。我花了一段
我有这个代码: - (IBAction)setButtonPressed:(id)sender { NSUserDefaults *sharedDefaults = [[NSUserDefau
抱歉标题含糊不清,但我想不出我想在标题中做什么。无论如何,对于图像上的文本,我使用了 JLabel 文本并将其添加到图标中。 JLabel icon = new JLabel(new Imag
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我在将 Twitter 嵌入到我从 HTML 5 转换的 wordpress 运行网站时遇到问题。 我遇到的问题是推文不是我的自定义字体... 这是我无法使用任何 css 定位的 HTML 代码,我正
我正在尝试找到解决由于使用以下形式的代码而导致的冗余字符串连接问题的最佳方法: logger.debug("Entering loop, arg is: " + arg) // @1 在大多数情况下,
我写了这个测试 @Test public void removeRequestTextFromRouteError() throws Exception { String input = "F
我目前正在创建一个正则表达式来拆分所有匹配以下格式的字符串:&[文本],并且需要获取文本。字符串可能类似于:something &[text] &[text] everything &[text] 等
有没有办法将标题文本从一个词变形为另一个词,同时保留两个词中使用的字母?我看过的许多 css 文本动画大多是视觉的,很少有旋转整个单词的。 我想要做的是从一个词过渡,例如“BEACH”到“CHANGE
总结matplotlib绘图如何设置坐标轴刻度大小和刻度。 上代码: ?
我在容器 (1) 中创建了容器 (2)。你能帮忙如何向容器(1)添加文本吗?下面是我的代码 return Scaffold( body: Padding( padding: c
我似乎找不到任何人或任何人这样做过。我试图限制我们使用的图像数量,并想创建一个带有渐变作为其“颜色”的文本,并在其周围设置渐变轮廓/描边 到目前为止,我还没有看到任何将两者结合在一起的东西。 我可以自
我正在为视频游戏暗黑破坏神 2 使用 discord.py 构建一个不和谐机器人。其中一项功能要求机器人从暗黑破坏神 2 屏幕截图中提取项目的名称和属性。我目前正在为此使用 pytesseract,但
我很难弄清楚如何旋转 strip.text theme 中的属性来自 ggplot2 .我使用的是 R 版本 3.4.2 和 ggplot2 版本 2.2.1。 以下是 MWE 的数据。 > dput
我是一名优秀的程序员,十分优秀!