更新 - これは、昨日投稿した次のリンクに関連しています。
https://stackoverflow.com/questions/15916360/swing-gui-application-in-Java-with-multiple-frames
ここで何か間違ったことをしている場合はお詫びします。以前の投稿に書き込もうとしましたが、コメント ボックスを超えてそれを行う方法が見つかりませんでした。
コードにいくつかの変更を加えました。現在、3 つの JPanels を使用しています。CardLayout に他の 2 つを保持するメインのパネルを除いて、各パネルのクラスを作成しました。メイン パネルは、メイン クラスとアプリケーションで同時に作成されます。ボタンを押したときに 2 つのパネルの 1 つに幸せそうな顔を描こうとしていますが、うまくいきません。
import statements;
public class JDataAnalyzerGui extends JFrame {
private static final String INTRO = "welcome";
private static final String OPERATIONS = "operations";
private CardLayout cardlayout = new CardLayout();
private JPanel mainPanel = new JPanel(cardlayout);
private WelcomePanel welcomePanel = new WelcomePanel();
private OperationPanel operationPanel = new OperationPanel();
private ReadFiles aFileReader;
public JDataAnalyzerGui() {
// adding panels to the main panel
mainPanel.add(welcomePanel.getMainComponent(), INTRO);
mainPanel.add(operationPanel.getMainComponent(), OPERATIONS);
welcomePanel.addAcceptActionListener(new ActionListener() { //moves to next view where the buttons are and were the drawing should happen
@Override
public void actionPerformed(ActionEvent e) {
int input = Integer.parseInt(welcomePanel.userInput.getText());
boolean isValid = isOptionValid(input);
if(isValid) {
cardlayout.show(mainPanel, OPERATIONS);
performActions(aFileReader);
}
}
});
operationPanel.addReturnActionListener(new ActionListener() { //returns to welcome window
@Override
public void actionPerformed(ActionEvent e) {
Graphics pen = getGraphics();
Object source = e.getSource();
if(source == operationPanel.aButton8) {
operationPanel.results.setText(null);
welcomePanel.userInput.setText(null);
cardlayout.show(mainPanel, INTRO);
}
// button1 が押されたとき、operationPanel から panel2 に文字列を描画します。
else if(source == operationPanel.aButton1) {
operationPanel.results.setText("The maximun opening value was " + Calculations.hiOpenValue);
operationPanel.panel2.setBackground(Color.GREEN);
pen.setFont(new Font("Broadway", Font.ITALIC, 12));
pen.setColor(Color.MAGENTA);
pen.drawString("this is a test", 20, 40);
}
// code for the rest of buttons
}
});
}
private boolean isOptionValid(int option) {
switch(option) {
case 1:
aFileReader = new ReadFiles("newMSFT.csv");
return true;
case 4:
Object[] options = { "YES", "CANCEL" };
int reply = JOptionPane.showOptionDialog(null, "Are you sure you want to go?", "Confirm Exit", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
if(reply == JOptionPane.YES_OPTION)
System.exit(0);
return false;
default:
JOptionPane.showMessageDialog(null, "That is an invalid option. Please try again");
return false;
}
}
public void performActions(ReadFiles obj) {
// code for numeric calculations
}
private JComponent getMainComponent() {
return mainPanel;
}
private static void createAndShowUI() {
JFrame frame = new JFrame("Data Analyzer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JDataAnalyzerGui().getMainComponent());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}
------------------------------ Operation Jpanel import ステートメント;
class OperationPanel {
JPanel mainPanel = new JPanel();
JPanel panel1 = new JPanel(new FlowLayout());
JPanel panel2 = new JPanel(new FlowLayout());
JPanel panel3 = new JPanel(new FlowLayout());
JLabel results = new JLabel ("");
JButton aButton1 = new JButton("Max Open");; // 8 buttons in total, this is the one for painting
JButton aButton8 = new JButton("Return to Main");
public OperationPanel() {
mainPanel.setLayout(new GridLayout(3, 1));
mainPanel.add(panel1);
mainPanel.add(panel3);
panel2.setBackground(Color.WHITE);
mainPanel.add(panel2);
panel1.add(aButton1);
// adding all buttons to panel1
panel2.add(results);
}
public JComponent getMainComponent() {
return mainPanel;
}
public void addReturnActionListener(ActionListener listener) { // el que retorna a welcome view
aButton8.addActionListener(listener);
aButton1.addActionListener(listener);
//addActionListener for all buttons
}
}
-------------------- ウェルカム パネル クラス WelcomePanel {
private JPanel mainPanel = new JPanel();
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel(new GridLayout(5,1));
JPanel panel3 = new JPanel(new FlowLayout());
JLabel greetings = new JLabel("Welcome to Data Analizer");
Font bigFont = new Font("Comic Sans", Font.BOLD, 30);
JLabel label1 = new JLabel("Please select one of these options:");
JLabel label2 = new JLabel("1. newMSFT.csv");
JLabel label3 = new JLabel("2. XXX.csv");
JLabel label4 = new JLabel("3. YYY.csv");
JLabel label5 = new JLabel("4. QUIT");
Font bigFont2 = new Font("Arial", Font.BOLD, 20);
JTextField userInput = new JTextField(10);
JButton aButton = new JButton("Accept");
public WelcomePanel() {
mainPanel.setLayout(new GridLayout(3, 1));
greetings.setFont(bigFont);
label1.setFont(bigFont2);
label2.setFont(bigFont2);
label3.setFont(bigFont2);
label4.setFont(bigFont2);
label5.setFont(bigFont2);
mainPanel.add(panel1);
mainPanel.add(panel2);
mainPanel.add(panel3);
panel1.add(greetings);
panel2.add(label1);
panel2.add(label2);
panel2.add(label3);
panel2.add(label4);
panel2.add(label5);
panel3.add(userInput);
panel3.add(aButton);
}
public void addAcceptActionListener(ActionListener listener) { // este es el que llama a segunda ventana o view
aButton.addActionListener(listener);
userInput.addActionListener(listener);
}
public JComponent getMainComponent() {
return mainPanel;
}
}
特定のパネルに描画する方法がわかりません。
ありがとう