検索を完了しましたが、このトリッキーな問題で一致した答えが表示されませんでした。JPanelのボタン内でJPanelを呼び出すことができません
ここで私は来る。あなたの助けを前もってありがとう。
actionlistenerを使用してJPanelのボタン内でJPanelを呼び出そうとしています。 追加した最初のボタンでうまくいきましたが、他の2つのボタンでは機能しません。 最初のボタンで呼び出されたjpanelsと残りの2番目のボタンの違いは、 最初のボタンが現在のJpanelから別のJpanelを呼び出していることです。他の2人は現在のJpanels内に2つのプライベートクラスのjpanelを呼び出すことを と呼びます。
私は何をしていますか: 2つのボタンを交換して同じJpanel内に2つの異なるチャートを表示しようとしています。プライベートjpanelsは純粋にチャートの描画に使用されます。私は に完全に新しいJPanelを作成せずに、これらの2つのjpanelを別のボタンで呼び出すだけで、チャートを描画する各jpanelを含み、最初のボタンの別のjpanelを呼び出すように呼び出す必要があると思いました。
私の扱いにくい言い回しについてお詫び申し上げます。コードがあります。
パブリッククラスExamPerfはJPanelのを拡張{
最終のJPanel viewPerf = TabbedQuiz.viewPerfPanel。
最終的なChartsPanel CP =新しい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);
}
});
//これは第2のボタンです。私はプライベートクラス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);
}
});
//これは第3ボタン、同じ問題です。
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);
}
}
//これは第2のプライベートクラス、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));
}
}
}
を拡張私にそれらを投げてください何もはっきりしていない、あなたは非常に多くのみんなありがとう。