- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我没有很好的 HTML/CSS 知识,所以请原谅我严重缺乏知识。我正在开发一个 GUI,当发生错误时我会在其中生成一个消息对话框。此错误消息可能很短或很长。我正在使用以下改编自 this solution 的代码.
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class TestOptionDialog {
public static void main(String[] args) {
String msgLong = "This is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long message";
String msgShort = "This is a freaking short message";
int screenWidth = java.awt.Toolkit.getDefaultToolkit().getScreenSize().width;
JOptionPane.showMessageDialog(new JFrame(),
"<html><body><p style='width:100%;max-width:" + 0.6 * screenWidth + "px'>" + msgLong + "</p></body></html>",
"Error", JOptionPane.ERROR_MESSAGE);
JOptionPane.showMessageDialog(new JFrame(),
"<html><body><p style='width:100%;max-width:" + 0.6 * screenWidth + "px'>" + msgShort + "</p></body></html>",
"Error", JOptionPane.ERROR_MESSAGE);
}
}
我的问题是,如果我只将宽度变量设置为某个像素数(例如 0.6*screenWidth),太长的消息会成功包装,但是对于短消息,对话框比文本大得多。相反,如果我只设置 max-width 参数,短消息将以完美的尺寸显示,但太长的消息不会像我想要的那样包装到屏幕尺寸的 60%。
所以我想,我只使用两个参数并将宽度设置为 100%(正如我在某处读到的那样),但这仍然不会包装太长的消息。我怎样才能实现这两件事?
编辑:使用 Marius 答案(效果很好)后,我遇到了以下问题:即使计算出的文本宽度高于阈值(例如,60%) screenWidth),对话框不会中断。有人明白发生了什么事还是我错过了什么?请参阅以下代码片段和输出:
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class TestOptionDialog {
public static void main(String[] args) {
// 1512 px
String message = "message message message message message message message message message message message message message message message message message message message message message message message message message message message ";
// 1232 px
String message1 = "message message message message message message message message message message message message message message message message message message message message message message ";
// 1064 px
String message2 = "message message message message message message message message message message message message message message message message message message message ";
// Break line at:
int threshold = 1152;
JOptionPane.showMessageDialog(new JFrame(),getFormattedErrorMessage(message, threshold),
"Error", JOptionPane.ERROR_MESSAGE);
JOptionPane.showMessageDialog(new JFrame(),getFormattedErrorMessage(message1, threshold),
"Error", JOptionPane.ERROR_MESSAGE);
JOptionPane.showMessageDialog(new JFrame(),getFormattedErrorMessage(message2, threshold),
"Error", JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
private static String getFormattedErrorMessage(String message, int maxDialogWidth) {
String string;
JLabel label = new JLabel(message);
if (label.getPreferredSize().width > maxDialogWidth) {
string = "<html><body><p style='width:" + maxDialogWidth + "px;'>" + message + "</p></body></html>";
} else {
string = "<html><body><p>" + message + "</p></body></html>";
}
return string;
}
}
最佳答案
这有点棘手。一个“肮脏”的解决方案是仅在需要时才添加“width”CSS属性;见附件代码:
public class TestOptionDialog {
public static void main(String[] args) {
String msgLong = "This is a freaking long messageThis is a freaking long messags a freaking long messageThis is a freakis a freaking long messageThis is a freakieThis is a freaking ls a freaking long messageThis is a freakiong messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long messageThis is a freaking long message";
String msgShort = "This is a freaking short message";
int screenWidth = java.awt.Toolkit.getDefaultToolkit().getScreenSize().width;
int maxDialogWidth = (int) (0.6 * screenWidth);
JOptionPane
.showMessageDialog(new JFrame(),
getMessage(msgLong, maxDialogWidth), "Error",
JOptionPane.ERROR_MESSAGE);
JOptionPane.showMessageDialog(new JFrame(),
getMessage(msgShort, maxDialogWidth), "Error",
JOptionPane.ERROR_MESSAGE);
}
private static String getMessage(String message, int maxDialogWidth) {
String string;
JLabel label = new JLabel(message);
if (label.getPreferredSize().width > maxDialogWidth) {
string = "<html><body><p style='width:" + maxDialogWidth + "px;'>"+message+"</p></body></html>";
} else {
string = "<html><body><p>" + message+ "</p></body></html>";
}
return string;
}
}
编辑请记住,java.awt.Toolkit.getDefaultToolkit().getScreenSize().width
将采用“主”屏幕的屏幕宽度;因此,如果您有一个全屏应用程序,并且用户在“辅助”屏幕上运行该应用程序,则该值可能不是您要查找的值;另外,如果用户没有在全屏模式下运行您的应用程序,则该值可能不是您要查找的值。
如果事实上,您只想提供一个主屏幕大小 60% 的弹出窗口,是的,这种方法是正确的。
关于java - 使用 width 和 max-width 在 JOptionPane 中换行文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35405672/
我想了解这两者的区别 谢谢 最大宽度:100px 宽度:100px body{ max-width: 1080px; width: 1080px; backgrou
jQuery 的 .width()、jQuery 的 .css('width') 和 .style 返回的值有什么区别.width 节点上的属性? 我很好奇,因为在尝试将两个表格单元格的宽度设置为相等
我可以在 wordpress 的 header php 中添加两个视口(viewport): 和 我希望能够使用 viewport width 1024 显示everything,除非您是低于 x
好的,所以我得到了 ImageBackground 的以下组件(使用 typescript ,但应该是不言自明的)。 (这是 react 原生的) import * as React from "re
我正在尝试根据 div 中包含的图像的宽度调整其大小,但没有任何 JS 方法可以一致地工作来获取图像的宽度。 label here img { width: auto
我有一个表,我试图找到表中每个 td 的宽度。我尝试了各种变体:$("td")[0].width(),但它们都不起作用,收到错误:"Uncaught TypeError: $ (...)[0].wid
我在使 rem 中的 min-width 与百分比宽度共存时遇到了一些问题。 When resizing this jsfiddle the outer right block is going un
当我在 chrome(以及 Edge/Brave/Opera)的设备模式下测试页面时,设备宽度属性似乎减少了,但宽度属性没有 重新创建: html {
我想依次显示 div #botone、#bottwo 和 #bottree。我还希望在 #botone div 上按 100% 宽度和比例高度调整背景图像。 现在最后两个 Div 显示在 #boton
我是第一次学习 JavaScript 的学生,我有一个学校问题,我们需要指出 width 和 style.width 接受的数据类型。 我知道数据类型有数字、字符串、空值、未定义、 bool 值和对象
所以看起来在移动设备中媒体查询使用 screen.width 根本没有改变。但是在我的桌面上,当我更改窗口大小时,screen.width 保持不变,$(window).width() 发生变化,并且
http://jsfiddle.net/3BFGU/27/ 有谁知道为什么包含文本“ABC”的跨度的宽度返回 0。 1) 仅在 Firefox 中发生。2)如果我删除两者之间的跨度,它工作正常。 (h
我知道下面的代码清除了 Canvas canvas.width = canvas.width 但这在内部是如何工作的呢? 赋值运算符只是将一些值赋给变量,但是上面的代码如何清除 Canvas ? 根据
当使用 max-width 时,为什么它不会“破坏”超过允许长度的单词,我该如何让它工作? JSFiddle function input() { var inputText = document
在移动网站上,在利用 width=device-width 视口(viewport)设置的同时调整文本大小的最佳方式是什么? 最佳答案 样式百分比如何?比如 100% 或 90%。 关于html -
对于我的 WPF Toolkit DataGrid,我使用以下自定义列标题样式:
过去,我看到下一个 css,我在想两者之间是否存在一些实际差异 min-width: 90px; max-width: 90px; 和 width: 90px; 最佳答案 使用 width 将简单地在
我有一个 R Markdown,我从 RStudio 中将其编织为 html。我可以使用 fig.width 和 fig.height 来调整我的绘图的分辨率,但我似乎无法加宽页面输出,以便文本输出不
此处的示例代码:http://pastebin.com/95z3pftQ 我正在尝试构建一个带有固定标题和“内容”部分的移动页面,该部分将填充外部(经过清理,但在其他方面是任意的)HTML。我需要使用
这里是 dp 单位的定义:(如果它是正确的...) 密度无关像素 - 一种基于屏幕物理密度的抽象单位。这些单位是相对于 160 dpi 屏幕而言的,因此 1 dp 是 160 dpi 屏幕上的一个像素
我是一名优秀的程序员,十分优秀!