更新了 - 这是一个具有以下链接昨天我有关。
https://stackoverflow.com/questions/15916360/swing-gui-application-in-java-with-multiple-frames
我很抱歉,如果我错了,在这里做什么,我想在我以前的帖子写的,我无法找到一个方法来做到这一点超出了评论框。
我做了我的代码一些变化,我现在有3个JPanels工作。 我创建了一个类,除了最主要的一个,将在其他两个CardLayout保持每个面板。 主面板在我的主类和应用程序在同一时间创建的。 现在,我想画一个笑脸在两个小组之一,当我按下一个按钮,但它不工作。
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);
}
//按下按钮1时,我想借鉴从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();
}
});
}
}
------------------------------操作的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;
}
}
我无法弄清楚如何在一个特定的面板绘制。
谢谢