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, sie zum Laufen zu bringen. 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, habe mir die Orcales-Dokumentation und andere Repos angesehen und hatte 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 testweise. Es spielte keine Rolle, wo ich es in der JDApp-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"));
});
}
Ich möchte nur, 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