Java Command "show" ist durchgestrichen(Bild)?
Ich glaube, dass durchgestrichene Commands erneuert werden oder so, stimmt das? Wenn das stimmt, was ist dann der neue Command? Oder warum funktioniert das sonst nicht? Für alle die es haben wollen den Code:
package cardlayout.tutorial;
import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ItemEvent; import java.awt.event.ItemListener;
import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JPanel;
public class CardLayout extends JFrame {
public static void main(String[] args) {
new CardLayout();
}
private static final long serialVersionUID = 420622292333313289L;
private Toolkit t;
private int x, y, width = 800, height = 600;
//Komponenten
private JPanel mainContainer;
private JComboBox comboBox;
public CardLayout(){
t = Toolkit.getDefaultToolkit();
Dimension d = t.getScreenSize();
x = (int) ((d.getWidth() - width) / 2);
y = (int) ((d.getHeight() - height) / 2);
setTitle("Gui Tutorial");
setBounds(x, y, 800, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.initialisierung();
this.initListener();
setVisible(true);
}
private void initialisierung(){
this.getContentPane().setLayout(new BorderLayout());
this.mainContainer = new JPanel(new java.awt.CardLayout());
this.comboBox = new JComboBox(new String[]{"Card1", "Card2", "Card3", "Card4"});
this.comboBox.setEditable(false);
this.getContentPane().add(comboBox, BorderLayout.PAGE_START);
this.getContentPane().add(mainContainer, BorderLayout.CENTER);
}
private void initListener(){
this.comboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
CardLayout cl = (CardLayout) mainContainer.getLayout();
cl.show(mainContainer, e.getItem().toString());
}
});
}
}

3 Antworten
Ich glaube, dass durchgestrichene Commands erneuert werden oder so, stimmt das? Wenn das stimmt, was ist dann der neue Command? Oder warum funktioniert das sonst nicht?
Wenn eine Methode durchgestrichen ist, heißt das, dass die Methode deprecated ist. Heißt: Die Methode sollte nicht mehr verwendet werden, da sie ggf. in einer späteren Funktion heraus genommen wird, und eine andere Methode hierfür empfohlen wird.
In der JavaDoc findest du meist einen Hinweis darauf, welche Methode stattdessen verwendet werden soll:
Deprecated. As of JDK version 1.5, replaced by Window.setVisible(boolean).
Sorry regex. Auch wenn die Vermutung nahe liegt, dass es sich um das CardLayout handelt. So ist das falsch. - Da der Fragesteller seine Klasse CardLayout nennt, welche von JFrame erbt.
public class CardLayout extends JFrame { ... }
package cardlayout.tutorial;
Daher ist mein Einwand mit JFrame#show durchaus berechtigt.
Wenn Klassen- oder Methodennamen durchgestrichen werden, macht dich dein Editor darauf aufmerksam, dass diese deprecated sind, also eigentlich nicht mehr genutzt werden sollten, da sie veraltet sind und möglicherweise sogar Fehler/Sicherheitslücken/Performanceschwächen o.ä. aufweisen.
Stattdessen sollte man die Methoden nehmen, die diese Funktionalität nun (anders) umsetzen. Aufschluss über die neue Alternative (in deinem Fall wäre das die Methode setVisible) gibt meist die Java Dokumentation oder gar bereits der Editor durch einen Tooltip selbst, wenn du deine Maus über den durchgestrichenen Text / die Warnung bewegst.
Ich hab die Lösung gefunden: Ich habe nicht den LayoutManager CardLayout verwendest sondern meine eigene Klasse, welche ebenfalls CardLayout heißt. xD
Gut, das erklärt auch, wieso in der Dokumentation kein deprecated Hinweis für die Methode vermerkt ist.
setVisible(true);
Angewandt auf deine jFrame:
cl.setVisible(true);
https://docs.oracle.com/javase/8/docs/api/java/awt/CardLayout.html#show-java.awt.Container-java.lang.String-