Die Informationen sind da, man muss es nur aus dem Dialog extrahieren, nachdem der Benutzer es mit gemacht wird. Ich würde den Code oben mindestens zwei neue Methoden geben, eine öffentliche getColor()
Methode, die colorsList.getSelectedItem();
zurückgibt, die Farbauswahl des Benutzers (ich bin mir nicht sicher, welche Art von Objekt das ist, so kann ich die Methode noch nicht zeigen) . Auch ein anderer, der der Benutzers gefüllte Einstellung bekommt, vielleicht
public boolean getFilled() {
return filled.isSelected();
}
Da der Dialog modal ist, werden Sie wissen, dass der Benutzer es beendet hat, sofort zu verwenden, nachdem Sie es sichtbar im Telefonvorwahl eingestellt. Und hier rufen Sie die oben genannten Methoden zum Extrahieren der Daten auf.
Im folgenden Code habe ich dies in diesem Abschnitt gezeigt: drawingSettings.setVisible (true);
// here you extract the data
Object color = drawingSettings.getColor();
boolean filled = drawingSettings.getFilled();
textArea.append("Color: " + color + "\n");
textArea.append("Filled: " + filled + "\n");
}
Zum Beispiel (siehe Kommentare):
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Window;
import java.awt.Dialog.ModalityType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
@SuppressWarnings("serial")
public class UseDrawingSettings extends JPanel {
private JTextArea textArea = new JTextArea(20, 40);
private DrawingSettingWindow drawingSettings;
public UseDrawingSettings() {
JPanel topPanel = new JPanel();
topPanel.add(new JButton(new ShowDrawSettings()));
setLayout(new BorderLayout());
add(new JScrollPane(textArea));
add(topPanel, BorderLayout.PAGE_START);
}
private class ShowDrawSettings extends AbstractAction {
public ShowDrawSettings() {
super("Get Drawing Settings");
}
@Override
public void actionPerformed(ActionEvent e) {
if (drawingSettings == null) {
Window win = SwingUtilities.getWindowAncestor(UseDrawingSettings.this);
drawingSettings = new DrawingSettingWindow(win);
}
drawingSettings.setVisible(true);
// here you extract the data
Object color = drawingSettings.getColor();
boolean filled = drawingSettings.getFilled();
textArea.append("Color: " + color + "\n");
textArea.append("Filled: " + filled + "\n");
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
private static void createAndShowGui() {
UseDrawingSettings mainPanel = new UseDrawingSettings();
JFrame frame = new JFrame("UseDrawingSettings");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
}
@SuppressWarnings("serial")
class DrawingSettingWindow extends JDialog {
private static final String TITLE = "Drawing Setting Window";
private JComboBox<String> colorsList;
private JRadioButton normal;
private JRadioButton filled;
// not sure what colors is, but I'll make it a String array for testing
private String[] colors = {"Red", "Orange", "Yellow", "Green", "Blue"};
public DrawingSettingWindow(Window win) {
super(win, TITLE, ModalityType.APPLICATION_MODAL);
// this.setTitle("Drawing Setting Window");
this.setSize(550, 550); // !! this is not recommended
this.setLocationRelativeTo(null);
this.setModal(true);
this.setLayout(new GridLayout(4, 1));
JLabel selectColorText = new JLabel("Select Drawing Color");
colorsList = new JComboBox(colors);
JPanel panel1 = new JPanel();
panel1.add(selectColorText);
panel1.add(colorsList);
add(panel1);
JLabel selectStyleText = new JLabel("Select Drawing Style");
JPanel panel2 = new JPanel();
normal = new JRadioButton("Normal");
normal.setSelected(true);
filled = new JRadioButton("Filled");
ButtonGroup bg = new ButtonGroup();
bg.add(normal);
bg.add(filled);
panel2.add(selectStyleText);
panel2.add(normal);
panel2.add(filled);
add(panel2);
JButton ok = new JButton("OK");
add(ok);
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setVisible(false);
}
});
this.pack();
// this.setVisible(true); // this should be the calling code's responsibility
}
public Object getColor() {
return colorsList.getSelectedItem();
}
public boolean getFilled() {
return filled.isSelected();
}
public static void main(String[] args) {
JFrame frame = new JFrame("Foo");
}
}
Side Hinweise:
- Ich habe Ihre Klasse Konstruktor geändert, um einen Fensterparameter zu akzeptieren, die Basisklasse für JFrame, JDialog und so, und a Ging einen Anruf an den Konstruktor des Super. Auf diese Weise ist das Dialogfeld ein echtes untergeordnetes Fenster des aufrufenden Codes (oder Sie können
null
übergeben, wenn Sie es nicht möchten).
- Ich empfehle nicht machen den Dialog sichtbar in seinem Konstruktor. Es liegt in der Verantwortung des aufrufenden Codes, dies zu tun, und es gibt Fälle, in denen der aufrufende Code den Dialog nach dem Erstellen nicht sichtbar machen möchte, zum Beispiel wenn er einen PropertyChangeListener anfügen wollte, bevor er sichtbar gemacht wird. Dies ist am wichtigsten für modale Dialoge, aber es ist nur eine gute Programmierpraxis.
- Ich kannte den Typ der Objekte nicht, die von Ihrem Kombinationsfeld gehalten wurden, und machte daher ein Array von String für Demonstrationszwecke.
Bitte lesen Sie die Antworten zu beantworten. Bitte fragen Sie nach eventuellen Fragen. –
danke, du hast mir zu viel geholfen. Ich möchte (ShowDrawSettings) zeigen, wenn ich das Programm direkt ausführe, wie geht das? –
Das ist eine separate Frage und muss separat gestellt werden. Ich glaube, dass Ihre ursprüngliche Frage hier beantwortet wurde, und Sie sollten in Betracht ziehen, die Antwort zu akzeptieren. –