相关疑难解决方法(0)

用省略号截断字符串的理想方法

我相信我们所有人都在Facebook状态(或其他地方)看过省略号,然后点击"显示更多"并且只有另外两个字符左右.我猜这是因为懒惰的编程,因为肯定有一种理想的方法.

我将细长的字符[iIl1]称为"半字符",但是当它们几乎不隐藏任何字符时,这并不会使省略号看起来很傻.

有理想的方法吗?这是我的:

/**
 * Return a string with a maximum length of <code>length</code> characters.
 * If there are more than <code>length</code> characters, then string ends with an ellipsis ("...").
 *
 * @param text
 * @param length
 * @return
 */
public static String ellipsis(final String text, int length)
{
    // The letters [iIl1] are slim enough to only count as half a character.
    length += Math.ceil(text.replaceAll("[^iIl]", "").length() / 2.0d);

    if (text.length() > length)
    {
        return text.substring(0, length - …
Run Code Online (Sandbox Code Playgroud)

java ellipsis

56
推荐指数
7
解决办法
4万
查看次数

如何计算文本在JTextArea中的行数(以及每行中的列数)?

在对问题中提出的问题感兴趣之后, 我试图接近它几次并且失败了,我不喜欢那样:)

我认为如果问题被分成子问题,它可能有助于解决它.

为简单起见,假设JTextArea不会改变其大小,因此我们不需要担心重新评估等.我认为重要的问题是:

1.如何计算某个文本在JTextArea中占用的行数?

2. JTextArea中的列数与它可以放在一行中的字符数之间的关系是什么?所以我们可以计算行长度.

请在下面找到包含要处理的文本区域的示例代码:

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class TextAreaLines
{
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                JPanel p = new JPanel();
                JFrame f = new JFrame();
                JTextArea ta = new JTextArea("dadsad sasdasdasdasdasd");
                ta.setWrapStyleWord(true);
                ta.setLineWrap(true);
                ta.setRows(5);
                ta.setColumns(5);
                p.add(ta);
                f.setContentPane(p);
                f.setSize(400, 300);
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setVisible(true);             
                //BTW the code below prints 1
                System.out.println("ta.getLineCount()="+ta.getLineCount());
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑1:所以我提出了以下代码,但问题是输出不是你看到的,即

//for input
//JTextArea ta = …
Run Code Online (Sandbox Code Playgroud)

java swing jtextarea

12
推荐指数
3
解决办法
9980
查看次数

如何改变秋千标签的差距

我创建了一些标签:

leftLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
leftLabel.setFont(new Font(FONT, Font.PLAIN, 280));
leftLabel.setBorder(BorderFactory.createTitledBorder("aaa"));
leftLabel.setText("0");
Run Code Online (Sandbox Code Playgroud)

看起来像这样: 在此输入图像描述

正如你所看到的那样,上下差距很大.我怎么能减少它?

java swing jlabel

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

拉伸JLabel文本

有没有办法让JLabel的文字伸展到100%的高度?当组件的大小也发生变化时,我需要更新文本.

我看到一些可行的解决方案; 它涉及计算和设置字体大小,使其显示正确的高度.我还必须添加监听器,以便在高度改变时使其响应,我不知道我应该在哪里做到这一点.

我希望有一个更好的布局管理器解决方案,但找不到任何东西.

有任何想法吗?

java swing jlabel graphics2d paintcomponent

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

JFormattedTextField未正确清除

我正在做这个任务,制作一个解决数独的程序.我有一个带有SudokuTextBox网格的面板,扩展了JFormattedTextField.我有一个MaskFormatter,因此每个文本框只接受一个整数.然后在我的面板中,当密钥被释放时,我有这个代码.

 public void keyReleased(KeyEvent e) {
  SudokuTextBox tb = (SudokuTextBox) e.getSource();
  int row = tb.getRow();
  int col = tb.getCol();
  int value = toInteger(tb.getText());
  //System.out.println(value);
  if(sudoku.isValid(row, col, value)) {
   sudoku.set(row, col, value);
  }
  else {
   sudoku.set(row, col, 0);
   tb.setText(null);
  }
  tb.setCaretPosition(0);
  sudoku.print();
 }
Run Code Online (Sandbox Code Playgroud)

问题是,如果我在文本框中放一个有效的值,然后我回去(由数独的规则),输入无效值的文本框被清除.但是当我向前选项卡时,前一个有效值显示在文本框中.我sudokumatrix包含所有已inputed不明确的价值像它应该这样,只有在相应的文本框中的数字.

当我将"SudokuTextBox扩展JFormattedTextField"更改为"SudokuTextBox extends JTextField"时,它更加令人困惑,它就像一个魅力.但我不能设置JTextField的大小,以便它是正方形,我不能强制每个文本框只有一个整数.

我错过了一些非常明显的东西吗

java keyevent sudoku jtextfield jformattedtextfield

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

如何根据JButton的大小更改字体大小?

我有一个java应用程序 - 一个计算器.我想通过调整应用程序窗口的大小来动态调整按钮的字体大小.怎么实现呢?

我的想法是使用ComponentEvents.我有应用程序窗口的初始大小和初始字体的大小.我想根据按钮的大小更改字体大小,受窗口大小更改的影响.问题是如何在overriden方法中使用[初始窗口大小]/[初始字体大小]的比例?每种字体的比例都不同.

import javax.swing.*;
import java.awt.*;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;

public class Main extends JFrame {
    public Main() {
        super("Test");

        JPanel cPane = (JPanel) getContentPane();
        cPane.setLayout(new BorderLayout());
        MyButton sampleButton = new MyButton("Sample text");
        sampleButton.setFont(new Font("Sans Serif", Font.PLAIN, 20));

        MyButton a, b, c, d;
        a = new MyButton("a");
        b = new MyButton("b");
        c = new MyButton("c");
        d = new MyButton("d");




        cPane.add(a, BorderLayout.PAGE_START);
        cPane.add(b, BorderLayout.PAGE_END);
        cPane.add(c, BorderLayout.LINE_START);
        cPane.add(d, BorderLayout.LINE_END);

        cPane.add(sampleButton, BorderLayout.CENTER);
        setSize(300, 200);
        setResizable(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void …
Run Code Online (Sandbox Code Playgroud)

java fonts swing jbutton

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

FontMetrics 返回错误的高度

我想获得面板上字符串的确切高度(以像素为单位)。所以我编写了一个程序来绘制字符串,然后在它周围绘制一个矩形。

使用FontMetrics,我使用getStringBounds方法来获取封闭的矩形。

然而它看起来是错误的:

在此输入图像描述

我期望矩形能够完美地包围我的文本,但顶部有空间(左侧和右侧有一点空间)。为什么它给我这个结果?

这是我的代码:

public class Test extends JPanel {

    @Override
    protected void paintComponent(Graphics g) {

        Font font = new Font("Arial", Font.PLAIN, 60);
        g.setFont(font);

        FontMetrics fm = this.getFontMetrics(font);

        String str = "100dhgt";
        Rectangle2D rect = fm.getStringBounds(str, g);

        int x = 5;
        int y = 100; 

        g.drawRect(x, y - (int)rect.getHeight(), (int)rect.getWidth(), (int)rect.getHeight());
        g.drawString(str, x, y);
    }

    public static void main(String[] args) {
        JFrame f = new JFrame();

        Test test = new Test();
        f.add(test);
        f.setVisible(true);
        f.setSize(400, 400); …
Run Code Online (Sandbox Code Playgroud)

java swing java-2d

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

如何在没有Java的图形的情况下获得文本超前(stringWidth)?

如何在没有GraphicsJava实例的情况下获得文本超前(stringWidth)?

doc示例中,stringWidth()取自FontMetrics,而FontMetrics取自Graphics.

有没有可能获得相同的Graphics

在下面的注释中说,这Graphics是必需的,因为它成立FontRenderContext.但我有FontRenderContext,只是没有Graphics.

所以,假设我FontRenderContext没有Graphics.那我该怎么办stringWidth()

java swing awt fontmetrics

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