Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
KlassenFehler bei public void setLabelText(JLabel label, String text)
public Nebenklasse(){
frame = new JFrame();
frame.setSize(new Dimension(250,300));
frame.setLocationRelativeTo(null);
frame.setVisible(true);
label = new JLabel();
label.setVerticalAlignment(SwingConstants.CENTER);
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setVisible(true);
frame.add(label);
}
public void setLabelText(JLabel label, String text){
label.setText(text);
}
Java:
import javax.swing.*;
public class Hauptklasse {
public static void main(String[] args) {
Nebenklasse f = new Nebenklasse();
f.setFrameText("Kappa");
f.setLabelText(label, "trololo");
}
}
Bei "f.setLabelText(label, "trololo");" kommt:
label cannot be rosolved as Variable
public void setLabelText(String label, String text){
label.setText(text);
}
String nehmen, aber wie soll ich denn aus dem String sagen, das das Label "lblname" z.B. angesprochen werden soll und den Text "text" bekommt?
Ich kann ja nicht einfach schreiben:
Ne Mein Ziel ist es eine Methode zu schreiben, in der ich den Namen des Labels zuerst auswähle und dann den Text die das Label dann erhalten soll setzen kann...
Ist doch über Resourcen fressend für jedes Label solch Methode zu schreiben :S
Ahja es geht schon wie du dir das vorstellst, aber so wird das normalerweise nicht gemacht. Du brauchst die Referenz auf dein JLabel Objekt und dann kannst du auf das JLabel die Operation setText(String) machen.
Wenn du das willst, das du den Labels einen Namen gibst, musst du die Bennenung in einer Map speichern und kannst somit auf das Objekt zugreifen.
Java:
package test;
import java.awt.GridLayout;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Test {
public static void main(String[] args) {
new Test();
}
Map<String, JLabel> labels = new HashMap<>();
public Test() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationByPlatform(true);
JPanel mainPanel = new JPanel(new GridLayout(3, 1));
JPanel inputPanel = new JPanel(new GridLayout(2, 2));
JLabel labelNameDesc = new JLabel("Name of JLabel:");
JTextField labelName = new JTextField(20);
JLabel textDesc = new JLabel("Text to write:");
JTextField textField = new JTextField(20);
inputPanel.add(labelNameDesc);
inputPanel.add(labelName);
inputPanel.add(textDesc);
inputPanel.add(textField);
mainPanel.add(inputPanel);
JPanel buttonPanel = new JPanel();
JButton changeTextButton = new JButton("Change text");
changeTextButton.addActionListener((e) -> {
setLabelText(labelName.getText(), textField.getText());
});
buttonPanel.add(changeTextButton);
mainPanel.add(buttonPanel);
JPanel labelPanel = new JPanel(new GridLayout(2, 2));
String labelName1Str = "label1";
String labelName2Str = "label2";
JLabel labelName1 = new JLabel(labelName1Str);
JLabel label1 = new JLabel();
JLabel labelName2 = new JLabel(labelName2Str);
JLabel label2 = new JLabel();
labels.put(labelName1Str, label1);
labels.put(labelName2Str, label2);
labelPanel.add(labelName1);
labelPanel.add(label1);
labelPanel.add(labelName2);
labelPanel.add(label2);
mainPanel.add(labelPanel);
frame.add(mainPanel);
frame.pack();
frame.setVisible(true);
}
public void setLabelText(String labelName, String text) {
JLabel label = labels.get(labelName);
if(label != null) {
label.setText(text);
}
}
}
public class Hauptklasse {
public static void main(String[] args) {
Nebenklasse f = new Nebenklasse();
if (!f.setLabelText("test", "trololo")) {
System.out.println("Kein entsprechendes Label gefunden");
};
}
}
Java:
public class Nebenklasse {
private JFrame frame;
private JLabel label;
private JPanel panel;
public Nebenklasse() {
frame = new JFrame();
frame.setSize(new Dimension(250, 300));
frame.setLocationRelativeTo(null);
frame.setVisible(true);
panel = new JPanel();
label = new JLabel();
label.setName("test");
label.setVerticalAlignment(SwingConstants.CENTER);
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setVisible(true);
panel.add(label);
frame.add(panel);
}
public Boolean setLabelText(String labelname, String text) {
Component[] comps = panel.getComponents();
for (Component comp : comps) {
if (comp instanceof JLabel) {
JLabel lbl = (JLabel) comp;
if (lbl.getName() != null && lbl.getName().equals(labelname))
{
lbl.setText(text);
return true;
}
}
}
return false;
}
}
Danke erstmal für die Antworten :toll:
Ich habe einige eben probiert, jedoch verschwand das label einfach, aber ich habs auch nur auf die Schnelle eben ausprobiert, ich gucks mir morgen nochmal an :gaen: und melde mich wieder