2014-10-14 3 views
0

Я пытаюсь вызвать метод из класса Circle в моем проекте, который отображает основную информацию об объекте в JLabel. По какой-то причине этот текст не будет идти на новую строку, даже если я использую HTML, чтобы попытаться отформатировать его:JLabel HTML New Line Issue

@Override 
public String toString(){ 
    return "<html>Type: " + this.getClass().getSimpleName() + "<br>Radius: " + getRadius() + "<br>Area: " + df.format(getArea()) + "<br>Perimeter: </html>" + df.format(getPerimeter()); 
} 

Я пытаюсь отобразить информацию с этим кодом:

@Override 
public void actionPerformed(ActionEvent ae) { 

     if(ae.getSource()==btnCalc && x==1){ 
      //create object 
     double R = Double.parseDouble(Txt1.getText()); 
     Circle circ = new Circle(R); 
     lblResult.setText(circ.toString()); 
     } 

При запуске программы она просто возвращает это: <html>Type: Circle<br>Radius: 4.0<br>Area: 50.27<br>Perimeter:</html> 25.13

редактирования: Я попытался просто установив текст в сообщении исключения вместо того, чтобы вызвать метод, и он не работает так как редактировать: Теперь это происходит, когда я пытаюсь запустить классы сферы цилиндра, но этого не происходит, когда у меня нет html в методе toString(). enter image description here

Оказывается, я использовал DecimalFormat в последних четырех классах, что и давало мне исключение. Как только я избавился от этого, строки отлично отформатировались с использованием JTextPane вместо JtextField.

+0

Разве ваш тег html не должен находиться в конце строки, а не частично через нее? – khelwood

+0

Даже в конце строки он не форматирует его. Он просто заканчивает отображение ' Тип: Circle
Радиус: 4,0
Площадь: 50,27
Периметр: 25,13' – DeathWish

+0

отлично работает, когда я пытаюсь это: 'JLabel LBL = новый JLabel (» Тип: Circle
Радиус: 4.0
Area : 50,27
Периметр: 25,13 "); JFrame f = новый JFrame(); . F.getContentPane() добавить (LBL); f.pack(); f.setVisible (true); ' – khelwood

ответ

2

Из образа вы вставили, это выглядит, как будто это текст ВХОД управления (под Show Info кнопки), как JTextField и не JLabel.

Вы можете использовать контент HTML с помощью конструктора JLabel, а также с его методом setText. Он работает нормально.

JLabel lbl = new JLabel("<html>Type: Circle<br>Some info<br>More info</html>") 

JLabel lbl2 = new JLabel(); 
lbl2.setText("<html>Type: Circle<br>Some info<br>More info</html>") 

Но если вы хотите иметь ВХОД контроль (как в изображении), вы не можете использовать HTML с JTextField. Для этого вам нужно использовать JTextPane.

JTextPane txt = new JTextPane(); 
txt.setContentType("text/html"); 
txt.setText("<html>Type: Circle<br>Some info<br>More info</html>");