Сделал поиск, и я действительно не видел согласованного ответа с этой сложной проблемой.Невозможно вызвать JPanel в кнопке JPanel
Здесь я прихожу, ребята. Заранее благодарны за Вашу помощь.
Я пытаюсь вызвать JPanel внутри кнопки JPanel с помощью actionlistener; , пока он работал нормально с первой кнопкой, которую я добавил, она не работает для двух других; разница между jpanels, вызываемыми в первой кнопке, а остальные две - , первая кнопка, вызывающая другой Jpanel из текущего Jpanel; но два других вызывали два частных класса jpanel в текущих Jpanels.
Что я делаю: я пытаюсь отображать две разные диаграммы в пределах одной Jpanel, используя две кнопки, взаимозаменяемые; частные jpanels используются исключительно для рисования диаграмм; Я думал, что мне нужно просто вызвать эти два jpanels на разных кнопках, не создавая абсолютно новый JPanel до , чтобы каждый jpanel рисовал диаграмму, а затем вызывал их, как я вызываю другую jpanel в первой кнопке.
извиниться за мои неудобные формулировки..Есть коды.
общественного класса ExamPerf расширяет JPanel {
конечная JPanel Viewperf = TabbedQuiz.viewPerfPanel;
final ChartsPanel CP = new ChartsPanel();
// Я создаю jpanel в его конструкторе; все кнопки находятся здесь;
public ExamPerf() {
setBackground(Color.BLACK);
setBounds(0, 0, 728, 380);
setLayout(null);
setBorder(BorderFactory.createLineBorder(Color.ORANGE, 10));
setBorder(BorderFactory.createTitledBorder(
BorderFactory.createLineBorder(Color.ORANGE),
"Exam Performance", 0, 0, new Font("Tahoma", Font.BOLD, 15),
Color.WHITE));
DrawCurrent drawarea=new DrawCurrent();
add(drawarea);
// Это первая кнопка, вызывающая другой Jpanel, совершенно другой класс;
JButton backBut = new JButton("Main Menu");
backBut.setFont(new Font("Tahoma", Font.BOLD, 11));
backBut.setBounds(10, 24, 93, 23);
add(backBut);
backBut.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
setVisible(false);
invalidate();
viewPerf.add(CP);
}
});
// Это вторая кнопка, я пытаюсь вызвать частный класс DrawCurrent; // но это не работает; моя мысль была,
JButton histoPerf = new JButton("Historical Performance");
histoPerf.setFont(new Font("Tahoma", Font.BOLD, 11));
histoPerf.setBounds(122, 24, 161, 23);
add(histoPerf);
histoPerf.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
setVisible(false);
invalidate();
DrawCurrent drawplace=new DrawCurrent();
add(drawplace, BorderLayout.CENTER);
}
});
// это третья кнопка, такая же проблема.
JButton currentPerf = new JButton("Current Performance"); currentPerf.setFont(new Font("Tahoma", Font.BOLD, 11)); currentPerf.setBounds(303, 24, 151, 23); add(currentPerf); currentPerf.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
setVisible(true);
invalidate();
DrawHistorical drawHis=new DrawHistorical();
add(drawHis);
}
});
}
// это первый частный класс, DrawCurrent;
общественного класса DrawCurrent расширяет JPanel {
public DrawCurrent() {
setBackground(Color.BLACK);
setForeground(null);
setBounds(10, 49, 708, 320);
setBorder(BorderFactory.createLineBorder(Color.ORANGE, 10));
setBorder(BorderFactory.createTitledBorder(
BorderFactory.createLineBorder(Color.ORANGE), "Chart", 0,
0, new Font("Tahoma", Font.BOLD, 15), Color.WHITE));
setLayout(null);
}
@Override
public void paintComponent(Graphics g) {
final Graphics2D canvas = (Graphics2D) g;
final BasicStroke Pen = new BasicStroke(4, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND);
canvas.setStroke(Pen);
canvas.setColor(Color.LIGHT_GRAY);
canvas.drawLine(5, 315, 703, 315);
canvas.drawLine(getWidth()/2, 700, getWidth()/2, 19);
// write the names of columns on top of them;
canvas.setFont(new Font("Times New Roman", Font.BOLD, 13));
canvas.drawString("Right", 50, 100);
canvas.drawString("Wrong", getWidth()/2 + 150, 300);
// draw two 3D rectangles as the columns of the performances;
//
canvas.fill3DRect(50, 100, 40, 215, true);
canvas.fill3DRect(getWidth()/2 + 150, 300, 40, 15, true);
}
}
// это второй частный класс, DrawHistorical;
частный класс DrawHistorical расширяет JPanel {
final ArrayList<Integer> examCount=new ArrayList<>();
final int leftEdge=10;
public DrawHistorical() {
setBackground(Color.BLACK);
setForeground(null);
setBounds(leftEdge, 49, 708, 320);
setBorder(BorderFactory.createLineBorder(Color.ORANGE, 10));
setBorder(BorderFactory.createTitledBorder(
BorderFactory.createLineBorder(Color.ORANGE), "Chart", 0,
0, new Font("Tahoma", Font.BOLD, 15), Color.WHITE));
setLayout(null);
}
@Override
public void paintComponent(Graphics g) {
final Graphics2D canvas = (Graphics2D) g;
final BasicStroke Pen = new BasicStroke(2, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND);
canvas.setStroke(Pen);
canvas.setColor(Color.LIGHT_GRAY);
canvas.setFont(new Font("Times New Roman", Font.BOLD, 13));
//this loop is to draw the graph of the historical performance of completed exams.
for(int i=0; i<examCount.size();i=i+3){
// write the number of exam on top of the lien graph.
canvas.drawString("Ex"+examCount.get(i).toString(), leftEdge+i, examCount.get(i));
// draw the line graph and extends as long as the number of completed exams increases.
canvas.drawLine(leftEdge+2+i, examCount.get(i), leftEdge+3+i, examCount.get(i+1));
}
}
}
Большое спасибо, ребята, ничего не ясно, пожалуйста, бросить их на меня.