Mit JTabbedPane können Sie benutzerdefinierte Tabs in Schwung bringenJava

Java-Forum
Anonymous
 Mit JTabbedPane können Sie benutzerdefinierte Tabs in Schwung bringen

Post by Anonymous »

Ich habe versucht, meine eigene Tab-Benutzeroberfläche zu erstellen, aber es gelingt mir nie ganz. Der folgende Code ist die Hauptklasse, die die App und das Registerkartenfeld erstellt. Ich versuche es so zu gestalten, dass ich ändern kann, wie die ausgewählte Registerkarte aussieht. Ich habe ein paar verschiedene Methoden ausprobiert, die ich auf stackoverflow und anderen Websites gefunden habe, und mir auch die Dokumentation von Orcale und andere Repos angesehen, hatte aber kein Glück.

Code: Select all

public class HDApp {
private final JFrame frame = new JFrame();
private final JTabbedPane tabPanel = new JTabbedPane();
private final MainPanel mainPanel = new MainPanel();
private final GearPanel gearPanel = new GearPanel();
private final RulesPanel rulesPanel = new RulesPanel();

public HDApp() {
initComponents();
}

private void initComponents() {
frame.getContentPane().setBackground(new Color(51,51,51));
frame.setTitle("Helldivers 2 Randomizer");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1042, 540);

tabPanel.setBackground(new Color(51,51,51));
tabPanel.setBackground(new Color(51,51,51));
tabPanel.setForeground(Color.WHITE);
tabPanel.setBorder(null);

JPanel randomizerPage = mainPanel.getMainPanel();
tabPanel.addTab("Randomizer", randomizerPage);

JPanel gearPage = gearPanel.getPanel();
tabPanel.addTab("Gear Information", gearPage);

JScrollPane rulePage = rulesPanel.getjScrollPane();
tabPanel.addTab("Randomzier Rules", rulePage);

frame.add(tabPanel);
frame.setVisible(true);
}
}
Die erste Methode, die ich ausprobiert habe, war die Verwendung von UIManager.put("TabbedPane.selected", Color.RED); Rot war nicht meine gewünschte Farbe, aber es funktionierte für einen Test. Es spielte keine Rolle, wo ich es in der HDApp-Klasse abgelegt habe. Es hat nie funktioniert. Da dies fehlschlug, habe ich versucht, meine eigenen Grafiken in einer separaten Klasse zu erstellen. Mein Problem ist, dass die Registerkarte nie richtig ausgefüllt wurde und immer Platz übrig blieb (und es scheint, als würde es mit „Wie kann ich die Form einer JTabbedPane-Registerkarte ändern?“) übereinstimmen.

Code: Select all

public class CustomTab extends JPanel {
private final JTabbedPane pane;
private final String title;

public CustomTab(JTabbedPane pane, String title) {
this.pane = pane;
this.title = title;
setOpaque(false);
setBackground(new Color(51,51,51));
setFont(new Font("FS Sinclair", Font.BOLD, 14));
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);

int index = pane.indexOfTab(title);
boolean selected = (index == pane.getSelectedIndex());

Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

if (selected) {
g2.setColor(new Color(51, 51, 51));
g2.fillRect(0, 0, getWidth(), getHeight());
System.out.println();
}

g2.setColor(Color.WHITE);
FontMetrics fm = g2.getFontMetrics();
int textWidth = fm.stringWidth(title);
int textHeight = fm.getAscent();
g2.drawString(title, (getWidth() - textWidth) / 2, (getHeight() + textHeight) / 2 - 2);

if (selected) {
g2.setColor(Color.WHITE);
g2.fillRect(0, getHeight() - 3, getWidth(), 3);
}
}

@Override
public Dimension getPreferredSize() {
return new Dimension(120, 15);
}
}
Also habe ich eine noch einfachere Version ausprobiert und das hat nicht funktioniert.

Code: Select all

public CustomTab(JTabbedPane pane, String title) {
setOpaque(true);
setFont(new Font("FS Sinclair", Font.BOLD, 14));
setPreferredSize(new Dimension(120, 15));

JLabel label = new JLabel(title, SwingConstants.CENTER);
label.setForeground(Color.WHITE);
setLayout(new BorderLayout());
add(label);

pane.addChangeListener(e -> {
boolean selected = (pane.getSelectedIndex() == pane.indexOfTab(title));
setBackground(selected ? new Color(51, 51, 51) : UIManager.getColor("TabbedPane.background"));
});
}
Alles, was ich möchte, ist, dass die ausgewählte Registerkarte diese Farbe (51,51,51) und eine weiße Unterstreichung hat.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post