相关疑难解决方法(0)

文本溢出:Firefox 4中的省略号?(和FF5)

text-overflow:ellipsis;CSS属性必须是的,微软已经适合网页所做的几件事情之一.

所有其他浏览器现在都支持它...除了Firefox.

自2005年以来,Firefox开发人员一直在争论它,但尽管对它有明显的需求,它们似乎无法真正实现它(即使是实验性-moz-实现也足够了).

几年前,有人设法破解Firefox 3以支持省略号.黑客使用该-moz-binding功能使用XUL实现它.现在有很多网站正在使用这种黑客攻击.

坏消息?Firefox 4正在删除该-moz-binding功能,这意味着此黑客将无法再使用.

因此,一旦Firefox 4发布(本月晚些时候,我听到),我们将回到让它无法支持此功能的问题.

所以我的问题是:还有其他方法吗?(我试图避免回到Javascript解决方案,如果可能的话)

[编辑]
很多投票,所以我显然不是唯一想知道的人,但到目前为止我有一个答案基本上都是'使用javascript'.我仍然希望找到一个根本不需要JS的解决方案,或者最糟糕的是只将它用作CSS功能不起作用的后备.因此,我将在这个问题上发布一个赏金,关于有人在某个地方找到答案的机会.

[编辑]
更新:Firefox已进入快速开发模式,但尽管现在正在发布FF5,但仍不支持此功能.现在大多数用户已从FF3.6升级,黑客不再是解决方案.好消息我被告知它可能会被添加到Firefox 6中,而新版本的发布时间表应该会在几个月内完成.如果是这样,那么我想我可以等一下,但遗憾的是他们不能早点排序.

[最终编辑]
我看到省略号功能最终被添加到Firefox的"Aurora频道"(即开发版).这意味着它现在应该作为Firefox 7的一部分发布,它将于2011年底发布.真是令人宽慰.

可在此处获取发行说明:https://developer.mozilla.org/en-US/Firefox/Releases/7

css firefox ellipsis css3

104
推荐指数
4
解决办法
2万
查看次数

找出JLabel的文本是否超过标签大小

在Java中,当由于空间不足而无法显示JLabel的文本时,文本被截断并且最后添加"...".

如何轻松找出当前JLabel是显示全文还是截断?


编辑:

我看到有一种方法可以通过使用找出文本的大小FontMetrics.但是,此解决方案并未完全回答这个问题.在JLabel的文本包含HTML装饰的metrics.stringWidth()情况下,还将计算HTML标签的宽度.因此,可能会发生metrics.stringWidth()比JLabel的宽度更大的结果,但仍然可以正确显示文本.

有没有办法知道在显示文本时JLabel本身做出了什么决定.它是否决定截断文本.

java swing jlabel sizing

17
推荐指数
3
解决办法
1万
查看次数

如何消除大尺寸java swing标签的差距

在我的应用程序中,我有一个字体大小超过200的标签.这个标签包含大的上下(不规则)间隙.我该如何删除它?

这是我的代码:

package Core;

import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class LabelDemo extends JPanel {
    public LabelDemo() {
        super(new GridBagLayout()); 
        JLabel label2;
        GridBagConstraints c = new GridBagConstraints();
        c.gridx = 0;
        c.gridy = 0;
        // Create the other labels.
        label2 = new JLabel("Text-Only Label");
        label2.setBorder(BorderFactory.createTitledBorder("aaaaaaaa"));
        label2.setFont(new Font("Verdana", Font.PLAIN, (int) 220));
        // label2.setBorder(new EmptyBorder(-50, 0, 0, 0));

        // Add the labels.
        add(label2, c);
    }

    /**
     * Create the GUI …
Run Code Online (Sandbox Code Playgroud)

java swing jlabel

6
推荐指数
1
解决办法
2505
查看次数

如何在不切割单词的情况下在中间缩写字符串

我正在使用StringUtils.abbreviateMiddle(string, middle, targetLength);缩写中间的字符串,但使用此方法切断了单词.有没有一种方法,它只会在最接近弦的中间位置的空间切断弦?

public static String shortenStringMiddle(String string, String middle, int targetLength) {
    targetLength = Math.abs(targetLength);

    if (string != null && string.length() > targetLength) {

        return StringUtils.abbreviateMiddle(string, middle, targetLength);
    }
    else {
        return string;
    }
}
Run Code Online (Sandbox Code Playgroud)

输入如果应用于此文本:

东南亚鱼虾养殖的疾病控制 - 诊断和畜牧技术:SEAFDEC-OIE研讨会论文集 - 东南亚鱼虾养殖疾病控制研讨会 - 诊断和畜牧技术,2001年12月4日至6日,伊洛伊洛市,菲律宾

System.out.println(StringUtils.abbreviateMiddle("Disease Control in Fish and Shrimp Aquaculture in Southeast Asia - Diagnosis and Husbandry Techniques: Proceedings of the SEAFDEC-OIE Seminar-Workshop on Disease Control in Fish and Shrimp Aquaculture in Southeast Asia - Diagnosis and …
Run Code Online (Sandbox Code Playgroud)

java string

6
推荐指数
1
解决办法
1353
查看次数

剪掉左侧JLabel的文本

默认情况下JLabel,如果文本太长而无法像这样完全显示,则会在右侧截断3个点的文本: 在此处输入图片说明

(图像来自我正在处理的一个小型备份应用程序)。如您所见,最后一个JLabel上方的“取消”按钮被切除。这种行为显然是不可取的,因为文本中最相关的部分被删去了。

我希望结果标签在此图像中看起来像(右列,对分辨率不佳表示抱歉):
在此处输入图片说明

资源

到目前为止,我已经尝试将标签内文本的对齐方式更改为JLabel.RIGHT,将组件方向更改为ComponentOrientation.RIGHT_TO_LEFT,set horizontalTextPosition,全部无效:

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

public class Backup
{
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(()->{
            JLabel label = new JLabel("Some test text 1 2 3 4 5 6 7 8 9 10 abcdefghjiklmnopqrstuvwxyz", JLabel.RIGHT);
            label.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
            label.setHorizontalTextPosition(JLabel.RIGHT);

            JFrame frame = new JFrame();
            frame.add(label);
            frame.pack();
            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            frame.setVisible(true);
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用HTML:

<html>
    <body>
        <p style="width:300px;overflow-x:hidden;direction:rtl">
            kladsjhglakjsjdghlekfalksjdvhlkjdsnkljhsdlkvjhasdkjhfslkdjhcksdjhvflkasjvhlkajdlkajvsdhvlkjsadhaaaaaaaaaaaaa
        </p>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

尽管此功能可以在浏览器中正常运行,但swing似乎不支持足够的样式属性集来支持此行为。

编写自己的实现完全满足此要求的实现并不难。不过,我想知道是否有实现这一目标的“途径”。

java swing jlabel

6
推荐指数
1
解决办法
810
查看次数

如何在调整大小时更改JLabel字体大小以填充JPanel可用空间?

这里有一个类似的问题: 如何更改JLabel字体的大小以获取最大大小

但它不适用于倒退.

因此,如果你做得JPanel更大,字体就会增长,但是如果你让它变JLabel小,字体就像以前一样

检查此图片

如何在调整大小时Jlabel根据JPanel大小增加字体?

java swing jlabel

5
推荐指数
1
解决办法
8076
查看次数

在JLabel中以不同方式对齐文本和图标

我正在尝试创建一个左侧文本对齐且右侧图标对齐的JLabel,我尝试了以下代码:

_ip = new JLabel(ip);
_ip.setFont(boldFont);
_ip.setBounds(5, 0, 100, 50);
_ip.setIcon(images.ipBan);
_ip.setBorder(BorderFactory.createLineBorder(Color.black, 1));
_ip.setHorizontalTextPosition(SwingConstants.LEFT);
add(_ip);
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

对齐预览

红色图像显示实际图像对齐,灰色图像显示我想要图像的位置.

如果我添加

_ip.setAlignmentX(JLabel.RIGHT_ALIGNMENT);
Run Code Online (Sandbox Code Playgroud)

什么都没发生,如果我补充

_ip.setHorizontalAlignment(JLabel.RIGHT);
Run Code Online (Sandbox Code Playgroud)

图标右对齐,但文本右对齐,我希望它左对齐

有办法吗?

java swing jlabel alignment imageicon

3
推荐指数
2
解决办法
1万
查看次数

更改后,JTree convertValueToText返回被截断

我有一个实现的自定义JTree实现convertValueToText.这种实现取决于某些全球状态.如果返回的字符串比以前返回的字符串更长(实际上我认为更宽,就像在像素中触发它),文本将被截断并用"..."填充.当重绘是由(de)选择元素或repaint树上引起时,这是真的.

convertValueToText以这种方式实施是否有效?(我知道树形显示不会自动更新).

如何摆脱"..."并强制所有元素用他们当前的文本值正确绘制?

UPDATE2:

显然我违反了Swings相当严格的踩踏政策(http://docs.oracle.com/javase/6/docs/api/javax/swing/package-summary.html).进行更新:

        SwingUtilities.invokeAndWait(new Runnable() {
            @Override
            public void run() {
                for (int row = 0; row < tree.getRowCount(); row++) {
                    ((DefaultTreeModel) tree.getModel())
                            .nodeChanged((TreeNode) tree.getPathForRow(row)
                                    .getLastPathComponent());
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

似乎工作正常.

更新:

这是一个最小的例子:

import java.util.Enumeration;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;

public class WeirdTreeFrame extends JFrame {
    public class WeirdTree extends JTree {
        public WeirdTree(TreeNode root) {
            super(root);
        }

        @Override
        public String convertValueToText(Object value, boolean selected,
                boolean expanded, …
Run Code Online (Sandbox Code Playgroud)

java swing jtree

2
推荐指数
1
解决办法
3041
查看次数

测试JLabel是否需要更改大小

如何测试具有设置大小的JLabel是否无法显示它设置为显示的所有文本?

java swing text resize jlabel

2
推荐指数
1
解决办法
89
查看次数

使用.将文本拟合到JTextField

我有一个JTextField textField,我有一个任意的String string

我希望文本字段显示字符串的结尾,但切断它不适合的内容并使用"..."代替它.例如,如果字符串是,"Hello How Are You Doing"那么文本字段可能看起来像

...re You Doing
Run Code Online (Sandbox Code Playgroud)

鉴于textfieldstring,我该怎么做?

更新:我想这样做的原因是因为它是一个文件选择器,所以我想优先显示文件的结尾.例如,如果用户选择保存在/Users/Name/Documents/Folder1/Folder2/Folder3/file.txt,那么我想显示结束,其余不适合的应该替换为"..."

这是它的地方:

JFileChooser chooser = new JFileChooser();
int response = chooser.showSaveDialog(this);
if(response == JFileChooser.APPROVE_OPTION) {
    File file = chooser.getSelectedFile();
    String string = file.getAbsolutePath();

    fileTextField.setText(/* here's where the code would go */);
}
Run Code Online (Sandbox Code Playgroud)

java swing jtextfield

2
推荐指数
1
解决办法
1578
查看次数

自定义按钮不能在mac上工作(ButtonUI)

我有一个应用程序,它使用遍布文本和图标的自定义按钮.适用于Windows和Linux,但现在OSX用户抱怨.文本不会显示在Mac上,只是'...'.代码看起来很简单,但是当涉及到mac时我很无能为力.我怎样才能解决这个问题?

测试用例:

package example.swingx;
import example.utils.ResourceLoader;
import com.xduke.xlayouts.XTableLayout;    
import javax.swing.*;
import javax.swing.plaf.ComponentUI;
import java.awt.*;
import java.awt.event.ActionEvent;

public class SmallButton extends JButton {
    private static ComponentUI ui = new SmallButtonUI();
    public SmallButton() {
        super();
        /*  final RepaintManager repaintManager = RepaintManager.currentManager(this);
        repaintManager.setDoubleBufferingEnabled(false);
        setDebugGraphicsOptions(DebugGraphics.FLASH_OPTION);*/
    }
    public SmallButton(AbstractAction action) {
        super(action);
    }
    public SmallButton(String text) {
        super(text);
    }
    public SmallButton(Icon icon) {
        super(icon);
    }
    public void updateUI() {
        setUI(ui);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final JPanel …
Run Code Online (Sandbox Code Playgroud)

java macos swing look-and-feel jbutton

2
推荐指数
1
解决办法
3606
查看次数

Jlabel和不可编辑的JTextField之间的区别

如果这个问题很简单,请原谅我.我不是GUI专家.但是,我需要创建一个Swing控件,在该控件中,只能根据某些计算(从不允许用户输入)以编程方式插入文本.这里是否有任何偏好使用JLabel与不可编辑的JTextField?我知道两者都有效,但只是好奇在这种情况下使用其中一种是否更好.

java swing

2
推荐指数
2
解决办法
3397
查看次数

如何在我的自定义控件中实现类似JLabel的大小管理?

在下面的代码中,仅JFrame包含JLabel,位于中心BorderLayout.

package test.swing;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class Try_JLabel_01 {

    public static void main(String[] arg) {

        JFrame frame = new JFrame() {

            JLabel label = new JLabel("label");

            {
                setLayout(new BorderLayout());
                add(label, BorderLayout.CENTER);
            }

        };

        frame.pack();
        //frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);


    }

}
Run Code Online (Sandbox Code Playgroud)

如果运行,该程序将显示窗口,该窗口完全符合控件大小.

同时,如果我定义自定义控件,则默认窗口大小为零:

public class Try_JLabel_02 {

    public static void main(String[] arg) {

        JFrame frame = new JFrame() {

            //JLabel label = new JLabel("label");
            JComponent label = new JComponent() {

                @Override
                protected …
Run Code Online (Sandbox Code Playgroud)

java swing jcomponent

1
推荐指数
2
解决办法
289
查看次数