JLabels в вопросе о размерах JPanels - PullRequest
0 голосов
/ 22 июня 2011

В настоящее время я пишу Java-приложение для отображения списка идей из базы данных. Каждая идея имеет заголовок и номер, который я хотел бы отобразить в столбце вместе с аналогичными идеями. Как вы можете видеть на картинке ниже, у меня возникла небольшая проблема с упаковкой.

A small clipping of the problem at hand

То, что я хотел бы, это способ программно отрезать хвост длинного имени идеи, чтобы вписаться в выделенное пространство. Итак:

если ширина столбца только

########################

A really long idea titl

станет

A really long i... #123

код

public class IdeaBar extends JPanel implements MouseListener {

private SortingColumn column;
private Idea idea;

private JPanel headPanel;
private JPanel bodyPanel;
private boolean isShrunk;
private boolean mouseToggle;

public IdeaBar(Idea id) {

    this.idea = id;

    this.setDoubleBuffered(true);

    setLayout(new MigLayout("insets 0, hidemode 2", "[grow]", "[32px:32px:32px]0[]"));

    // Head Panel
    headPanel = new JPanel();
    headPanel.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    headPanel.addMouseListener(this);
    headPanel.setBorder(new BevelBorder(BevelBorder.RAISED, null, null,
            null, null));
    headPanel.setBackground(Color.GRAY);
    headPanel.setBackground(idea.getStatus().getColor());
    headPanel.setLayout(new BorderLayout(0, 0));

    // Head Panel Labels
    JLabel titleLabel = new JLabel("" + idea.getTitle());
    titleLabel.setFont(new Font("Dialog", Font.PLAIN, 20));
    titleLabel.setForeground(idea.getStatus().getTextColor());
    headPanel.add(titleLabel, BorderLayout.WEST);

    JLabel numLabel = new JLabel("New label");
    numLabel.setHorizontalAlignment(SwingConstants.RIGHT);
    numLabel.setForeground(idea.getStatus().getTextColor());
    numLabel.setFont(new Font("Tahoma", Font.PLAIN, 20));
    numLabel.setText("#" + idea.getNumber());
    headPanel.add(numLabel, BorderLayout.EAST);
    add(headPanel, "cell 0 0, grow, wrap");

    // Body Panel
    bodyPanel= new IdeaBarBodyPanel(idea);
    this.add(bodyPanel, "grow");

    this.shrink();

}

Ответы [ 3 ]

2 голосов
/ 22 июня 2011

Попробуйте добавить titleLabel в CENTER вместо WEST. Таким образом, его следует изменить, чтобы заполнить оставшееся пространство и автоматически добавить многоточие к тексту. Обратите внимание, что это может не работать в каждой системе, см. Здесь: Java JLabel / JButton: в некоторых системах я получаю "..." (многоточие), а в некоторых системах - нет. как я могу принудительно отключить многоточие?

1 голос
/ 22 июня 2011

Общий код. Видит, если строка длиннее, чем вы можете отобразить. Если это так, он вырезает часть, которая не может быть отображена, и добавляет ...


int colLength = 20;

public void addEntry(String entry)
{
    if(entry.length() > colLength)
    {
        entry = entry.substring(0,colLength -3) + "...";
    }
    add(entry)
}

0 голосов
/ 23 июня 2011

Ну, в конце концов, я просто решил покрасить свой собственный компонент. В любом случае, я хочу тщательно контролировать фон, так что это было лучшее решение для меня.

Приветствую вас обоих, потому что ваши ответы помогли мне найти свой путь!

...