Ich habe eine Frage zu benutzerdefinierten Tabkomponenten in Swing.JTabbedPane TabComponent Standardregisterkartenhervorhebung
Der folgende Code 3 benutzerdefinierte Registerkarte Komponenten hinzufügen:
public class TabbedExample extends JPanel {
public static void main(String... args) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
createUI();
}
}
}
public static void createUI() {
try {
for(LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch(Exception e) {}
JFrame frame = new JFrame("Tab Test");
frame.setMinimumSize(new Dimension(256,200));
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().add(new TabbedExample());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public TabbedExample() {
super(new BorderLayout());
JTabbedPane pane = new JTabbedPane();
pane.addTab("tmp", new JTextField());
pane.addTab("tmp", new JTextField());
pane.addTab("tmp", new JTextField());
for(int i = 0; i < 3; i++) {
JPanel tabPanel = new JPanel();
tabPanel.setBackground(new Color(0,0,0,0));
tabPanel.setLayout(new BoxLayout(tabPanel, BoxLayout.X_AXIS));
JTextField textField = new JTextField("Tab " + i);
textField.setOpaque(false);
textField.setBackground(new Color(0,0,0,0));
textField.setBorder(new EmptyBorder(0,0,0,0));
tabPanel.add(label);
tabPanel.add(new JButton(Integer.toString(i)));
pane.setTabComponentAt(i, tabPanel);
}
add(pane, BorderLayout.CENTER);
}
}
das Problem ist jetzt, dass das Standard-Tab Verhalten nicht mehr funktioniert. Wenn Sie die Maus über eine Registerkarte bewegen, wird sie automatisch hervorgehoben, indem Sie die Hintergrundfarbe ändern. aber sobald die JTextField
ist, registriert die Registerkarte höchstwahrscheinlich eine mouseExited Event
und stoppt die Hervorhebung der Registerkarte. Die Registerkarte wird also flackern, wenn Sie mit der Maus über die Registerkarte fahren.
meine Frage ist jetzt: Gibt es eine Möglichkeit (ohne einen neuen Hervorhebungsmechanismus zu implementieren), um die Registerkarte hervorzuheben, wo die benutzerdefinierte tabComponent befindet?
Durch die Hervorhebung, bekommen der Fokus? –
@TamasRev: Nein. Es könnte spezifisch für Nimbus LAF sein. Ich bin mir nicht sicher, wie sich die anderen LAFs in diesem Bereich verhalten. Die Registerkarten können sich in verschiedenen Zuständen befinden (zumindest so scheint es als einfacher Benutzer). fokussierte Maus außerhalb der Registerkartenregion (Farbe 1), fokussierte Maus innerhalb der Registerkartenregion (Farbe 2), unfokussierte Maus außerhalb der Registerkartenregion (Farbe 3), unfokussierte Maus innerhalb der Registerkartenregion (Farbe 4). Was mit der Markierung hervorgehoben wird, ist, wenn der Benutzer den Cursor über eine Registerkarte bewegt, die die Farbe der Registerkarte ändert. Mit einer benutzerdefinierten tabComponent wird es etwas flackern, wenn Sie die Maus über die Komponente bewegen. –