Java don';t重新喷漆或重新验证
当程序运行时,按钮被绘制为10X10。 我通过修改菜单更改了按钮20X20。 但是,按钮不可见 将鼠标移到按钮上时显示。 不要被重新粉刷。 重新验证日期也不相同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
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(使用自定义图像)。还没有。请修改源代码好吗?