[英]Refresh panel when a button in clicked
我有一個MainPanel,其中包含2個其他面板(顯示隨機數)和一個Next Button。 當我單擊下一步按鈕時,我想顯示數字的另一種組合。 我無法做到這一點。
我平均水平。 我知道如何使用面板,按鈕和偵聽器(不確定)。 但是如何鏈接它們不!!!
我的代碼:
public class Test extends JFrame implements MouseListener {
JPanel mainPanel = new JPanel(new GridLayout(1, 1, 5, 5));
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
JPanel buttonPanel = new JPanel();
JButton next = new JButton();
public void randomNumber(){
int randomNumber1 = 0;
int randomNumber2 = 0;
randomNumber1 = 1 + (int) (Math.random() * 9);
randomNumber2 = 1 + (int) (Math.random() * 9);
label1.setText(String.valueOf(randomNumber1));
label2.setText(String.valueOf(randomNumber2));
}
public Test(){
panel1.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
panel2.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
panel1.setBackground(Color.red);
panel2.setBackground(Color.yellow);
panel1.add(label1);
panel2.add(label2);
next.setText("Next");
mainPanel.add(panel1);
mainPanel.add(panel2);
buttonPanel.add(next);
this.add(mainPanel, BorderLayout.NORTH);
this.add(buttonPanel,BorderLayout.CENTER);
initUI();
}
/**
*
*/
public final void initUI()
{
setTitle("Test");
setSize(800, 400);
setLocationRelativeTo(null);
setVisible(true);
this.setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent event) {
Object source = event.getSource();
if (source instanceof JButton) randomNumber() ;
}
/**
*
* @param args
*/
public static void main(String[] args){
Test game = new Test();
game.setVisible(true);
}
}
您不應該實現MouseListener
而應該實現ActionListener
。
在Test
構造函數的末尾,您應該添加
randomNumber(); // Show the number when the application starts
next.addActionListener(this); // actionPerformed will now recieve signals from 'next' button
我整理了一下您的代碼。 這是您的GUI。
我在您的下一個按鈕中添加了一個動作監聽器。 我確保您的JFrame代碼以正確的順序執行。
這是代碼:
package com.ggl.testing;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Test27 implements Runnable {
JPanel mainPanel = new JPanel(new GridLayout(1, 1, 5, 5));
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
JPanel buttonPanel = new JPanel();
JButton next = new JButton();
@Override
public void run() {
JFrame frame = new JFrame();
frame.setTitle("Test");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel1.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
panel2.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
panel1.setBackground(Color.red);
panel2.setBackground(Color.yellow);
panel1.add(label1);
panel2.add(label2);
next.setText("Next");
next.addActionListener(new RandomNumber());
mainPanel.add(panel1);
mainPanel.add(panel2);
buttonPanel.add(next);
frame.add(mainPanel, BorderLayout.NORTH);
frame.add(buttonPanel, BorderLayout.CENTER);
randomNumber();
frame.pack();
frame.setVisible(true);
}
public void randomNumber() {
int randomNumber1 = 0;
int randomNumber2 = 0;
randomNumber1 = 1 + (int) (Math.random() * 9);
randomNumber2 = 1 + (int) (Math.random() * 9);
label1.setText(String.valueOf(randomNumber1));
label2.setText(String.valueOf(randomNumber2));
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Test27());
}
public class RandomNumber implements ActionListener {
@Override
public void actionPerformed(ActionEvent event) {
randomNumber();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.