Java don';t重新喷漆或重新验证

Java don';t重新喷漆或重新验证,java,swing,jframe,jbutton,repaint,Java,Swing,Jframe,Jbutton,Repaint,当程序运行时,按钮被绘制为10X10。 我通过修改菜单更改了按钮20X20。 但是,按钮不可见 将鼠标移到按钮上时显示。 不要被重新粉刷。 重新验证日期也不相同 package com.test; import java.awt.CardLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; import

当程序运行时,按钮被绘制为10X10。 我通过修改菜单更改了按钮20X20。 但是,按钮不可见

将鼠标移到按钮上时显示。 不要被重新粉刷。 重新验证日期也不相同

package com.test; 

import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class MenuTest extends JFrame {

    private Dimension dimen, dimen1;
    private int xpos, ypos;
    private JButton[][] btn = null;
    private JPanel p;
    private GridLayout grid;
    private CardLayout card;
    private int rownum;
    private int colnum;
    private int mineLevel;

    public MenuTest() {
        super("GAME");

        p = new JPanel();
        grid = new GridLayout();
        card = new CardLayout();

        createMenu();
        starting();
    }

    private void createMenu() {
        JMenuBar bar = new JMenuBar();
        setJMenuBar(bar);

        JMenu filemenu = new JMenu("파일(F)");
        filemenu.setMnemonic('F');

        JMenuItem startmenu = new JMenuItem("게임 시작(S)");
        startmenu.setMnemonic('S');
        startmenu.setActionCommand("START");
        startmenu.addActionListener(new MenuActionListener());
        filemenu.add(startmenu);

        JMenuItem minecntmenu = new JMenuItem("변경(M)");
        minecntmenu.setMnemonic('M');
        minecntmenu.setActionCommand("MODIFY");
        minecntmenu.addActionListener(new MenuActionListener());
        filemenu.add(minecntmenu);

        JMenuItem close = new JMenuItem("닫기(C)");
        close.setMnemonic('C');
        filemenu.add(close);
        bar.add(filemenu); //JMenuBar에 JMenu 부착 

        //도움말 메뉴 만들기-------------------------------- 
        JMenu helpmenu = new JMenu("도움말(D)");
        helpmenu.setMnemonic('D'); //단축키를 Alf + D 로 설정 

        JMenuItem help = new JMenuItem("Help(H)");
        help.setMnemonic('H');
        helpmenu.add(help);
        bar.add(helpmenu);
    }

    private class MenuActionListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            if (e.getActionCommand().equals("START")) {
                JOptionPane.showMessageDialog(null, "게임시작", "게임", JOptionPane.YES_NO_OPTION);
            } else if (e.getActionCommand().equals("MODIFY")) {
                modify();
                JOptionPane.showMessageDialog(null, "변경", "게임", JOptionPane.YES_NO_OPTION);
            }
        }
    }

    private void modify() {
        btn = null;

        setRowColnum(20, 20);
        MapInit(20);
        LayoutSet(400, 500);
    }

    private void starting() {
        setRowColnum(10, 10);
        MapInit(10);
        LayoutSet(200, 250);
    }

    private void setRowColnum(int rownum, int colnum) {
        this.rownum = rownum;
        this.colnum = colnum;
    }

    public static void main(String[] args) {
// TODO Auto-generated method stub 
        MenuTest mt = new MenuTest();
    }

    public void LayoutSet(int w, int h) {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.setSize(w, h);

        dimen = Toolkit.getDefaultToolkit().getScreenSize();
        dimen1 = this.getSize();
        xpos = (int) (dimen.getWidth() / 2 - dimen1.getWidth() / 2);
        ypos = (int) (dimen.getHeight() / 2 - dimen1.getHeight() / 2);
        this.setLocation(xpos, ypos);

        this.setVisible(true);
        this.setResizable(false);
    }

    public void MapInit(int minecnt) {
        p.removeAll();
        setBtn(rownum, colnum);

        card = new CardLayout(5, 5);
        this.setLayout(card);
        grid = new GridLayout(rownum, colnum, 0, 0);

        p = new JPanel(grid);

        int action_num = 0;
        for (int i = 0; i < btn.length; i++) {
            for (int j = 0; j < btn[i].length; j++) {
                action_num = (i * 10 + j);
                btn[i][j] = new JButton();
                p.add(btn[i][j]);
            }
        }

        this.repaint();

        this.add("View", p);
    }

    private void setBtn(int row, int col) {
        btn = new JButton[row][col];
    }
}
package.com.test;
导入java.awt.CardLayout;
导入java.awt.Dimension;
导入java.awt.GridLayout;
导入java.awt.Toolkit;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JMenu;
导入javax.swing.JMenuBar;
导入javax.swing.JMenuItem;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
公共类MenuTest扩展了JFrame{
私有维度dimen,dimen1;
私人int XPO、YPO;
私有JButton[]btn=null;
私人JPanel p;
专用网格布局网格;
私人卡;
私有int rownum;
私有int colnum;
私营部门;
公共菜单测试(){
超级(“游戏”);
p=新的JPanel();
grid=新的GridLayout();
卡片=新的卡片布局();
createMenu();
开始();
}
私有void createMenu(){
JMenuBar=新的JMenuBar();
setJMenuBar(bar);
JMenu filemenu=新建JMenu(“파일(F) ”;
filemenu.set助记符('F');
JMenuItem startmenu=新的JMenuItem(“게임 시작(S) ”;
startmenu.set助记符('S');
startmenu.setActionCommand(“开始”);
startmenu.addActionListener(新的MenuActionListener());
filemenu.add(开始菜单);
JMenuItem minecntmenu=新建JMenuItem(“변경(M) ”;
minecntmenu.setmemonic('M');
minecntmenu.setActionCommand(“修改”);
minecntmenu.addActionListener(新建MenuActionListener());
filemenu.add(minecntmenu);
JMenuItem close=新的JMenuItem(“닫기(C) ”;
close.setmemonic('C');
文件菜单。添加(关闭);
添加(文件菜单);//JMenuBar에 JMenu부착 
//도움말 메뉴 만들기-------------------------------- 
JMenu帮助菜单=新建JMenu(“도움말(D) ”;
helpmenu.set助记符('D')//단축키를 Alf+D로 설정 
JMenuItem help=新的JMenuItem(“帮助(H)”);
help.set助记符('H');
帮助菜单。添加(帮助);
添加(帮助菜单);
}
私有类MenuActionListener实现ActionListener{
已执行的公共无效操作(操作事件e){
如果(例如getActionCommand().equals(“开始”)){
JOptionPane.showMessageDialog(空,“게임시작", "게임", JOptionPane.YES\u NO\u选项);
}else if(例如getActionCommand().equals(“修改”)){
修饰();
JOptionPane.showMessageDialog(空,“변경", "게임“,JOptionPane.YES\u NO\u选项);
}
}
}
私有void modify(){
btn=null;
setRowColnum(20,20);
MapInit(20);
布局集(400500);
}
私有无效开始(){
setRowColnum(10,10);
MapInit(10);
布局集(200250);
}
私有void setRowColnum(int-rownum,int-colnum){
this.rownum=rownum;
this.colnum=colnum;
}
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
MenuTest mt=新的MenuTest();
}
公共无效布局集(int w,int h){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
此。设置尺寸(w,h);
dimen=Toolkit.getDefaultToolkit().getScreenSize();
dimen1=this.getSize();
xpos=(int)(dimen.getWidth()/2-dimen1.getWidth()/2);
ypos=(int)(dimen.getHeight()/2-dimen1.getHeight()/2);
此设置位置(xpos、YPO);
此.setVisible(true);
此参数为.setresizeable(false);
}
公共void MapInit(int minecnt){
p、 removeAll();
setBtn(rownum,colnum);
卡=新卡布局(5,5);
本.设置布局(卡片);
网格=新的网格布局(rownum、colnum、0、0);
p=新JPanel(电网);
int action_num=0;
对于(int i=0;i
从可见GUI添加/删除组件时,基本代码是:

panel.remove(...);
panel.add(...);
...
panel.revalidate();
panel.reapint();

删除/添加所有组件后,您需要执行
revalidate()
,这样会调用布局管理器并为所有组件指定大小和位置。然后
repaint()
确保组件已绘制。

不要。。。。ㅠㅠ public void MapInit(int-minecnt){1---------->p.removeAll();setBtn(rownum,colnum);card=new-CardLayout(5,5);this.setLayout(card);grid=new-GridLayout(rownum,colnum,0,0);p=new-JPanel(grid);int-action_-num=0;for(int-i=0;ip.revalidate();4---------->p.repaint();}当我最近做一些动画循环时,
revalidate()
对我来说已经足够了。我正在JFrame中完全替换JLabel(使用自定义图像)。还没有。请修改源代码好吗?