2015-08-30 4 views
0

Я хочу изменить только первые два слова JLabel на другой шрифт, чем остальные JLabel. Я обнаружил, что могу создать JPanel и иметь два JLabels с разными шрифтами. Я не могу использовать этот способ, потому что у меня может быть только один JLabel (это потому, что у меня есть слушатель мыши, который меняет текст этого JLabel на основе входа или выхода из других JLabels, которые находятся в отдельном JPanel). Там в любом случае? Я попытался это (добавление стороны JLabel бок с другим JLabel):Изменить шрифт части JLabel?

JLabel Giraffesays = new JLabel("Giraffe says:"); 
     Giraffesays.setFont(new Font("TimesRoman", Font.BOLD, 60)); 
     status.setText(Giraffesays +"Hi!"); //status is a JLabel 

, но это не сработало. Я также попытался сделать его строку:

String Giraffesays = "Giraffe says: 
     Giraffesays.setFont(new Font("TimesRoman", Font.BOLD, 60)); 
     status.setText(Giraffesays +"Hi!"); //status is a JLabel 

Но вы не можете изменить шрифт в строку ...

+1

Я бы использовал два JLabels, добавленных бок о бок для самого простого решения. Вы указываете: «Я не могу использовать этот путь, потому что у меня может быть только один JLabel (это потому, что у меня есть слушатель мыши, который меняет текст этого JLabel на основе входа или выхода из других JLabels, которые находятся в отдельном JPanel) «' - это кажется ложной причиной. Можете ли вы объяснить, почему это мешает вам это сделать? –

+1

Если вам нужно несколько форматирования текста, возможно, вы можете пойти для 'html string' для JLabel или' JTextPane' – Arvind

+0

@HovercraftFullOfEels Мне пришлось бы менять обе строки каждого JFrame на главной панели в каждом прослушивателе мыши, и у меня много , Кроме того, поскольку мой JLabel использовал бесчисленное количество раз в течение всего кода, его изменение также означало бы изменение всего моего кода. Вместо того, чтобы делать это, я хочу иметь возможность просто установить текст с разными шрифтами внутри него. Спасибо –

ответ

2

Попробуйте использовать HTML String с JLabel:

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

public class Test { 
    public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable(){ 
     @Override public void run() { 
     JFrame frm = new JFrame("Text formatting"); 
     frm.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     String giraffesays = "<html><span style=\"font-family:Arial;font-size:13px;\">Giraffe says :</span>Hi there!</html>"; 
     frm.getContentPane().add(new JLabel(giraffesays)); 
     frm.pack(); 
     frm.setLocationByPlatform(true); 
     frm.setVisible(true); 
     } 
    }); 
    } 
} 

enter image description here

Это линия с ошибкой

String giraffesays = "<html><font size="6"><span style=\"font-family:Arial;\">Giraffe says :</font></span></html>"; 

Pr oblem вам нужно избежать котировок size=\"6\".

+0

** После попытки сделать это способом HTML, я попробовал это: -> ** String giraffesays = " Жираф говорит : "; ** Я получил ошибку на свой размер шрифта = 6, и я не знаю, почему. Я очень новичок в использовании HTML с java, поэтому мне было интересно, можете ли вы мне помочь?: ** -> Левая часть задания должна быть переменной -> ** Я понимаю это, но не должен работа, даже если левая часть не является переменной, так как я объявила ее ? Спасибо ** –

+0

Полный код на следующий комментарий: –

+0

Строка giraffesays = "<размер шрифта =" 6 "> Жираф говорит:"; ** СЛЕДУЮЩАЯ ЛИНИЯ ** \t \t \t status.setText (giraffesays + «Привет!»); –

3

два подхода будут:

  1. использовать две отдельные JLabels
  2. JComponent поддерживает HTML, поэтому вы можете просто использовать теги шрифтов, чтобы изменить внешний вид текста. http://docs.oracle.com/javase/tutorial/uiswing/components/html.html
+0

** После попытки сделать это способом HTML, я попробовал это: -> ** String giraffesays = " Жираф говорит : "; ** Я получил ошибку на свой размер шрифта = 6, и я не знаю, почему. Я очень новичок в использовании HTML с java, поэтому мне было интересно, можете ли вы мне помочь?: ** -> Левая часть задания должна быть переменной -> ** Я понимаю это, но не должен работа, даже если левая часть не является переменной, так как я объявила ее ? Спасибо ** Я выложу полный код в следующей строке! –

+0

Строка giraffesays = " Жираф говорит:"; ** NEXT LINE ** status.setText (giraffesays + «Привет!»); –

+0

@ Это не проблема с HTML. По крайней мере, если это точная копия вашего кода. Эта часть: '' должна быть '' иначе 6 не будет интерпретироваться как часть строки – Paul