2016-03-26 15 views
3

Ich arbeite an einem Swing-GUI-Projekt, und ich habe eine JButton, die Text in einem JTextPane fett verwandelt. Ich benutze eine Action, um dies zu tun.JButton Text ändert sich, wenn eine Aktion eingestellt ist

Hier ist der Code für die Action

public static Action boldAction = new StyledEditorKit.BoldAction(); 

für die JButton

JButton bold = new JButton("B"); 
bold.setFont(new Font("Arial", Font.BOLD, 15)); 
bold.setBounds(393, 15, 100, 100); 
bold.setBackground(Color.WHITE); 
bold.setAction(boldAction); 
frame.add(bold); 

der Code Hier ist ohne die Action den Text auf der Schaltfläche enthalten ein fett "B", das, was ich ist wollen. Das Problem, das entsteht, ist, dass wenn ich die Aktion hinzufüge, ändert sich der Text auf der Schaltfläche, um "font-bold" zu sagen.

Warum passiert das und wie kann ich das beheben?

+0

'bold.setBounds (393, 15, 100, 100);' 1) Java GUIs hat auf verschiedene OS‘, Bildschirmgröße, Bildschirmauflösung arbeiten usw. unterschiedliche PLAFs in verschiedenen Gegenden verwendet. Als solche sind sie nicht für ein perfektes Pixel-Layout geeignet. Verwenden Sie stattdessen Layout-Manager oder [Kombinationen davon] (http://stackoverflow.com/a/5630271/418556) zusammen mit Layout-Auffüllung und Rahmen für [Leerraum] (http://stackoverflow.com/a/17874718/ 418556). 2) Um eine bessere Hilfe zu erhalten, sollten Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/) veröffentlichen. –

+0

Action's sind in sich abgeschlossene Arbeitseinheiten, die den NAMEN der Aktion enthalten, der von Schaltflächen verwendet wird, um ihren Text festzulegen – MadProgrammer

Antwort

1

Wenn Wenn Sie eine Aktion verwenden, werden die Eigenschaften der Aktion standardmäßig auf die Schaltfläche gesetzt.

Wenn Sie nicht möchten, dann nicht „font-bold“ müssen Sie die Aktion den Text ändern nach dem Abbinden:

JButton bold = new JButton(boldAction); 
bold.setText("B"); 

Auch benutzen Sie nicht den setBounds() -Methode. Swing wurde für die Verwendung mit Layout-Managern entwickelt.

//bold.setBounds(393, 15, 100, 100); 
+0

Danke, ich hatte gerade daran gedacht, das zu versuchen. Ich benutze 'setBounds()' nur, weil es so viel einfacher ist, Dinge zu planen, aber ich verstehe, was du sagst –

1

Die von StyledEditorKit bereitgestellten Aktionen ändern das Document Modell, das zu der von Unterklassen JTextComponent bereitgestellten Ansicht gehört, wie gezeigt here. Um die Schriftart zu ändern, die von JButton verwendet wird, verwenden Sie die UIManager, um die Eigenschaft mit dem Schlüssel "Button.font" zu ändern, wie gezeigt here.

Weil Sie wollen das Erscheinungsbild der Schaltfläche verändern, dynamisch die UIManager verwenden Sie die Schaltfläche erwarteten Schriftart und geben Sie eine abgeleitete Schriftart in der Schaltfläche Action zu erhalten, wie unten dargestellt:

image

final JButton button = new JButton(); 
Action action = new AbstractAction("Bold") { 
    Font font = (Font) UIManager.get("Button.font"); 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     button.setFont(font.deriveFont(Font.BOLD)); 
    } 
}; 
button.setAction(action); 
Verwandte Themen