2012-01-10 5 views
1

У меня есть небольшая проблема с jlabel. Когда на ярлыке отображаются удвоения, которые являются большими для экрана, я хотел бы иметь полосу прокрутки, чтобы увидеть их в любом случае. Я только что добавил панель прокрутки на всю панель, но она не проверяет, когда отображается двойная двойная.прокрутка JLabel в Java

вот мой код

public class OverviewPanel extends JPanel { 
    private static final long serialVersionUID = 1L; 
    private JLabel textNoNodes = new JLabel(); 
    private JLabel textNoEdges = new JLabel(); 
    private JLabel textInitial = new JLabel(); 
    private JLabel textTargets = new JLabel(); 
    private JLabel textFilename = new JLabel(); 
    private JLabel textProbabilityModelCheck = new JLabel(); 
    private JLabel textProbabilityCounterExample = new JLabel(); 
    private JLabel textNoSteps = new JLabel(); 

    public OverviewPanel() { 
     super(new SpringLayout()); 
     addRow("Number states", textNoNodes); 
     addRow("Number edges", textNoEdges); 
     addRow("Initial", textInitial); 
     addRow("Targets", textTargets); 
     addRow("Filename", textFilename); 
     addRow("Prob. model check", textProbabilityModelCheck); 
     addRow("Prob. counter example", textProbabilityCounterExample); 
     addRow("Number steps", textNoSteps); 
     SpringUtilities.makeCompactGrid(this, 8, 2, // rows, cols 
       6, 6, // initX, initY 
       6, 6); // xPad, yPad 
     setDefault(); 
    } 

    private void addRow(String text, JComponent component) { 
     JLabel l = new JLabel(text); 
     add(l); 
     l.setLabelFor(component);  
     add(component); 
    } 
    ... 
    } 
+0

Вы re_create ОбзорПанель в Runtime или OverviewPanel создается один раз и вы хотите изменить размер JComponets зависит от его содержимого, конвертируя длину текста в пиксели. – mKorbel

+0

Первоначально он создается со значениями по умолчанию и перезагружается, когда действие действительно произошло, но не как слушатель. функция reload явно вызывается. – user1140737

ответ

1

Я не уверен, потому что я не знаю SpringLayout, во всяком случае, я думаю, вы должны установить размер этикетки с размером текста. Чтобы получить его, вы можете использовать:

FontMetrics fm = someComponent.getFontMetrics(someFont); 
    int width = fm.stringWidth(someString); 

возможно добавление дополнительного пространства. Затем с наклейкой фактической ширины контейнера должен свиток ...

Конечно, я говорю о MinimumSize или малоэффективен ...

+4

Это кажется бесполезным кропотливым; сам 'JLabel' может рассчитать свой собственный предпочтительный размер при проверке. – trashgod

+0

О, спасибо, я не знал! – gotch4

3

Использование pack(), что «Причины этого Window быть чтобы соответствовать размеру и компоновке его подкомпонентов ». Может быть полезно и sscce.

Приложение: Экземпляр DecimalFormat может помочь избежать чрезвычайной изменчивости размера.

+0

Я не вижу, как пакет() применим к outPutPanel. На самом деле он работает с фреймами, но это JPanel. – user1140737

+1

Да, вы должны вызывать 'pack()' на панели 'Window' панели. Динамически вы можете использовать 'revalidate()', обычно за ним следует 'repaint()'. – trashgod

+0

Кроме того, pack() будет деактивировать окно ... лучше использовать revalidate() + repaint() – gotch4

2

IMHO, я бы использовал модифицированный JTextArea (т. Е. Отключенный, обернутый и непрозрачный). Не требуется никаких прокрутки, изменения размера или шрифта.!

+1

+1 В то же время однострочный 'JTable' дает хороший результат с типом' Double'. – trashgod