- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
计划是让程序在搜索另一首歌曲时用不同的歌词替换屏幕上的歌词。
}public void lyricPrinter(){
if(scroll != null){
scroll.removeAll(); //--> temporary test
System.out.println("removed scroll");
scroll.repaint();
}
JTextArea textarea = new JTextArea(lyrics);
textarea.setBackground(Color.LIGHT_GRAY);
textarea.setEditable(false);
scroll = new JScrollPane (textarea,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
GUI.frame.remove(scroll);
GUI.frame.add(scroll);
GUI.frame.setVisible(true);
}
我认为使用removeall()可以解决问题,但最终发生了这种情况..
第一次打印歌词.. 当我更改歌词并尝试替换之前的歌词后..
最佳答案
GUI.frame.remove(scroll);
删除了新 JScrollPane,即尚未添加的 JScrollPane,而不是旧的 JScrollPane当前驻留在 GUI 中。GUI.frame....
调用表明您可能误用了静态字段。您的 JFrame 不应由静态字段保存,除非您不关心维护数据和行为的封装。编辑
我推荐的是
setText(...)
,并传入包含新歌词的字符串即可。假设您有一个名为 SongLyricsTextArea 的 JTextArea,要交换文本,您要做的就是
String newLyrics = somehowGetNewLyricsToSong();
songLyricsTextArea.setText(newLyrics);
例如,在下面的演示程序中,我读入了 Java Swing 教程中的几个演示程序的 java 代码。我将程序名称放在右侧的 JList 中,并为 JList 提供一个 ListSelectionListener,用于交换 JTextArea(此处称为 programTextArea)中的文本,类似于我建议您执行的操作。我的演示中的关键代码位于此处的监听器中:
demoList.addListSelectionListener(new ListSelectionListener() {
@Override // a new program has been selected
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
if (demoList.getSelectedIndex() != -1) { // make sure selection valid
DemoProgram demoProgram = demoList.getSelectedValue(); // get selection
programTextArea.setText(demoProgram.getText()); // get text and pass into text area
}
}
}
});
整个程序,您应该编译并运行它以查看它是如何工作的,如下所示:
import java.awt.BorderLayout;
import java.io.IOException;
import java.net.URL;
import java.util.Scanner;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
@SuppressWarnings("serial")
public class SwapTextExample extends JPanel {
private static final String[][] DEMO_PROGS = {
{ "BorderDemo.java",
"http://docs.oracle.com/javase/tutorial/uiswing/examples/"
+ "components/BorderDemoProject/src/components/BorderDemo.java" },
{ "ButtonDemo.java",
"http://docs.oracle.com/javase/tutorial/uiswing/examples/"
+ "components/ButtonDemoProject/src/components/ButtonDemo.java" },
{ "ButtonHtmlDemo.java",
"http://docs.oracle.com/javase/tutorial/uiswing/examples/"
+ "components/ButtonHtmlDemoProject/src/components/ButtonHtmlDemo.java" },
{ "CheckBoxDemo.java",
"http://docs.oracle.com/javase/tutorial/uiswing/examples/"
+ "components/CheckBoxDemoProject/src/components/CheckBoxDemo.java" },
{ "ComboBoxDemo.java",
"http://docs.oracle.com/javase/tutorial/uiswing/examples/"
+ "components/ComboBoxDemoProject/src/components/ComboBoxDemo.java" }, };
private DefaultListModel<DemoProgram> model = new DefaultListModel<>();
private JList<DemoProgram> demoList = new JList<DemoProgram>(model);
private JTextArea programTextArea = new JTextArea(40, 70);
public SwapTextExample() throws IOException {
for (String[] demoProgText : DEMO_PROGS) {
String name = demoProgText[0];
String link = demoProgText[1];
URL url = new URL(link);
Scanner scanner = null;
try {
scanner = new Scanner(url.openStream());
StringBuilder sb = new StringBuilder();
while (scanner.hasNextLine()) {
sb.append(scanner.nextLine() + "\n");
}
String text = sb.toString();
DemoProgram demoProg = new DemoProgram(name, link, text);
model.addElement(demoProg);
} finally {
if (scanner != null) {
scanner.close();
}
}
}
demoList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
demoList.addListSelectionListener(new ListSelectionListener() {
@Override // a new program has been selected
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
if (demoList.getSelectedIndex() != -1) { // make sure selection valid
DemoProgram demoProgram = demoList.getSelectedValue(); // get selection
programTextArea.setText(demoProgram.getText()); // get text and pass into text area
}
}
}
});
setLayout(new BorderLayout());
add(new JScrollPane(demoList), BorderLayout.WEST);
add(new JScrollPane(programTextArea), BorderLayout.CENTER);
}
private static void createAndShowGui() {
SwapTextExample mainPanel;
try {
mainPanel = new SwapTextExample();
JFrame frame = new JFrame("Swap Text Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
class DemoProgram {
private String name;
private String link;
private String text;
public DemoProgram(String name, String link, String text) {
this.name = name;
this.link = link;
this.text = text;
}
public String getName() {
return name;
}
public String getLink() {
return link;
}
public String getText() {
return text;
}
@Override
public String toString() {
return name;
}
}
关于java - Java GUI 重画 JPanel JFrame 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21505895/
我正在尝试使用谷歌浏览器的 Trace Event Profiling Tool分析我正在运行的 Node.js 应用程序。选择点样本后,我可以在三种 View 之间进行选择: 自上而下(树) 自上而
对于一个可能是菜鸟的问题,我们深表歉意,但尽管在 SO 上研究了大量教程和其他问题,但仍找不到答案。 我想做的很简单:显示一个包含大量数据库存储字符串的 Android ListView。我所说的“很
我已经开始了一个新元素的工作,并决定给 Foundation 5 一个 bash,看看它是什么样的。在创建带有水平字段的表单时,我在文档中注意到的第一件事是它们使用大量 div 来设置样式。所以我在下
我有一个 Windows 窗体用户控件,其中包含一个使用 BeginInvoke 委托(delegate)调用从单独线程更新的第 3 方图像显示控件。 在繁重的 CPU 负载下,UI 会锁定。当我附加
我有一堆严重依赖dom元素的JS代码。我目前使用的测试解决方案依赖于 Selenium ,但 AFAIK 无法正确评估 js 错误(addScript 错误不会导致您的测试失败,而 getEval 会
我正在制作一款基于滚动 2D map /图 block 的游戏。每个图 block (存储为图 block [21][11] - 每个 map 总共 231 个图 block )最多可以包含 21 个
考虑到以下情况,我是前端初学者: 某个 HTML 页面应该包含一个沉重的图像(例如 - 动画 gif),但我不想强制客户缓慢地等待它完全下载才能享受一个漂亮的页面,而是我更愿意给他看一个轻量级图像(例
我正在设计一个小软件,其中包括: 在互联网上获取资源, 一些用户交互(资源的快速编辑), 一些处理。 我想使用许多资源(它们都列在列表中)来这样做。每个都独立于其他。由于编辑部分很累,我想让用户(可能
我想比较两个理论场景。为了问题的目的,我简化了案例。但基本上它是您典型的生产者消费者场景。 (我关注的是消费者)。 我有一个很大的Queue dataQueue我必须将其传输给多个客户端。 那么让我们
我有一个二元分类问题,标签 0 和 1(少数)存在巨大不平衡。由于测试集带有标签 1 的行太少,因此我将训练测试设置为至少 70-30 或 60-40,因此仍然有重要的观察结果。由于我没有过多地衡量准
我是一名优秀的程序员,十分优秀!