Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JButton大小调整问题_Java_Swing_Button - Fatal编程技术网

Java JButton大小调整问题

Java JButton大小调整问题,java,swing,button,Java,Swing,Button,人们。最近我开始做一些简单的游戏来提高我对swing的认识。我需要在我的一个项目中使用JButtons,所以我这样做了问题出在这里 当我打开窗口时,看到的不是加载图像的普通屏幕,而是我添加到框架中的最后一个按钮。我试着使用setSize()功能,但按钮仍然非常大,填满了屏幕 代码: import javax.swing.JPanel; import javax.swing.BorderFactory; import java.awt.Color; import java.awt.Dimensio

人们。最近我开始做一些简单的游戏来提高我对swing的认识。我需要在我的一个项目中使用JButtons,所以我这样做了问题出在这里

当我打开窗口时,看到的不是加载图像的普通屏幕,而是我添加到框架中的最后一个按钮。我试着使用
setSize()
功能,但按钮仍然非常大,填满了屏幕

代码:

import javax.swing.JPanel;
import javax.swing.BorderFactory;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.SwingUtilities;
import javax.swing.JFrame;
import java.awt.Image;
import java.io.*;
import java.net.URL;
import javax.imageio.*;
import java.awt.image.*;
import java.awt.Font;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class engine {
    public static int chips = 5000;
    public static String c = chips+"";
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                GUI();
                }
            });
    }

    private static void GUI() {
        JFrame f = new JFrame("Pinnacle Baccarat");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setPreferredSize(new Dimension(768, 512));
    f.add(new p());
    engine e2 = new engine();
    JButton bet1 = new JButton("Bet 1 chip");
    JButton bet2 = new JButton("Bet 10 chips");
    JButton bet3 = new JButton("Bet 100 chips");
    JButton bet4 = new JButton("Bet 1k chips");
    JButton bet5 = new JButton("Bet 10k chips");
    JButton bet6 = new JButton("Bet 100k chips");
    if(e2.chips < 1){bet1.setEnabled(false);}
    if(e2.chips > 0){bet1.setEnabled(true);}
    if(e2.chips < 10){bet2.setEnabled(false);}
    if(e2.chips > 9){bet2.setEnabled(true);}    
    if(e2.chips < 100){bet3.setEnabled(false);}
    if(e2.chips > 99){bet3.setEnabled(true);}
    if(e2.chips < 1000){bet4.setEnabled(false);}
    if(e2.chips > 999){bet4.setEnabled(true);}
    if(e2.chips < 10000){bet5.setEnabled(false);}
    if(e2.chips > 9999){bet5.setEnabled(true);}
    if(e2.chips < 100000){bet6.setEnabled(false);}
    if(e2.chips > 99999){bet6.setEnabled(true);}
    bet1.setPreferredSize(new Dimension(96, 32));
    bet2.setPreferredSize(new Dimension(96, 32));
    bet3.setPreferredSize(new Dimension(96, 32));
    bet4.setPreferredSize(new Dimension(96, 32));
    bet5.setPreferredSize(new Dimension(96, 32));
    bet6.setPreferredSize(new Dimension(96, 32));               
    f.add(bet1);
    f.add(bet2);
    f.add(bet3);
    f.add(bet4);
    f.add(bet5);
    f.add(bet6);
    f.pack();
        f.setVisible(true);

    }
}
class p extends JPanel {
    public p() {
    }
    public void paintComponent(Graphics g) {
    engine eng = new engine();
        super.paintComponent(g);       
        BufferedImage chip = null;
    BufferedImage table = null;
    try {
            table = ImageIO.read(new File("bg.png"));
    } catch (IOException e) {
    }
    try {
            chip = ImageIO.read(new File("chip.png"));
    } catch (IOException e) {
    }
    g.drawImage(table, 0, 0, null);
    g.drawImage(chip, 4, 446, null);
    g.setColor(new Color(255, 0, 0));
    g.setFont(new Font("default", Font.BOLD, 20));
    g.drawString(eng.c, 36, 467);
    }  
}
import javax.swing.JPanel;
导入javax.swing.BorderFactory;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.Graphics;
导入javax.swing.SwingUtilities;
导入javax.swing.JFrame;
导入java.awt.Image;
导入java.io.*;
导入java.net.URL;
导入javax.imageio.*;
导入java.awt.image.*;
导入java.awt.Font;
导入java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
公共级引擎{
公共静态整数芯片=5000;
公共静态字符串c=chips+“”;
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
GUI();
}
});
}
私有静态voidgui(){
JFrame f=新JFrame(“品尼高百家乐”);
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f、 setPreferredSize(新维度(768512));
f、 添加(新p());
发动机e2=新发动机();
JButton bet1=新JButton(“Bet 1芯片”);
JButton bet2=新JButton(“下注10筹码”);
JButton bet3=新JButton(“Bet 100筹码”);
JButton bet4=新JButton(“bet1k芯片”);
JButton bet5=新JButton(“Bet 10k芯片”);
JButton bet6=新JButton(“Bet 100k芯片”);
如果(e2.chips<1){bet1.setEnabled(false);}
如果(e2.chips>0){bet1.setEnabled(true);}
如果(e2.chips<10){bet2.setEnabled(false);}
如果(e2.chips>9){bet2.setEnabled(true);}
如果(e2.chips<100){bet3.setEnabled(false);}
如果(e2.chips>99){bet3.setEnabled(true);}
如果(e2.chips<1000){bet4.setEnabled(false);}
如果(e2.chips>999){bet4.setEnabled(true);}
如果(e2.chips<10000){bet5.setEnabled(false);}
如果(e2.chips>9999){bet5.setEnabled(true);}
如果(e2.chips<100000){bet6.setEnabled(false);}
如果(e2.chips>99999){bet6.setEnabled(true);}
bet1.设置首选尺寸(新尺寸(96,32));
bet2.设置首选尺寸(新尺寸(96,32));
bet3.设置首选尺寸(新尺寸(96,32));
bet4.设置首选尺寸(新尺寸(96,32));
bet5.设置首选尺寸(新尺寸(96,32));
bet6.设置首选尺寸(新尺寸(96,32));
f、 添加(β1);
f、 添加(β2);
f、 添加(bet3);
f、 添加(β4);
f、 添加(β5);
f、 添加(bet6);
f、 包装();
f、 setVisible(真);
}
}
类p扩展了JPanel{
公共p(){
}
公共组件(图形g){
发动机发动机=新发动机();
超级组件(g);
BuffereImage芯片=空;
BuffereImage表=空;
试一试{
table=ImageIO.read(新文件(“bg.png”);
}捕获(IOE异常){
}
试一试{
chip=ImageIO.read(新文件(“chip.png”);
}捕获(IOE异常){
}
g、 drawImage(表,0,0,空);
g、 drawImage(芯片4446,空);
g、 setColor(新颜色(255,0,0));
g、 setFont(新字体(“默认”,Font.BOLD,20));
g、 抽绳(英语,36467);
}  
}
有人能帮忙吗? 编辑:我还需要知道如何在特定的位置放置按钮。
编辑2:使用
f.setLayout(null)
后,按钮工作,但我的绘制方法和图片被破坏:它们不显示。有人能帮忙吗?

因为您没有指定布局管理器,请添加以下内容:

f.setLayout(new FlowLayout());

另外,要了解如何设置元素的位置,请阅读关于布局管理器的内容,或使用面板的
setLayout(null)
,然后使用
setBounds()
方法设置元素的X和Y位置。

JFrame的默认布局管理器是BorderLayout。这只允许一个部件处于五个位置中的任何位置。通过添加没有约束的按钮,它们将被添加到中心位置,每个按钮将替换之前的按钮

查看更多信息

编辑以添加一些信息:
另外,请忘记setXxxSize()方法和尝试手动放置组件。布局管理器将忽略您设置的尺寸,并为您调整和放置零部件的尺寸。了解不同的布局管理器,并使用它们的组合来实现您想要的布局。

每个新创建的JButton将替换上次创建的按钮,这是因为JFrame的默认布局(即BorderLayout),JButton将具有中心位置。您需要做的是将布局设置为另一个布局,这将允许您以不同的方式排列JButtons


当我使用
f.setLayout(newflowlayout())时,请在这里阅读更多信息-->

它最终没有遵循我的界限并从绘制方法中删除图片。然而,当我移除它时,它工作正常,除了最后一个仍然覆盖屏幕,并且除了最后一个按钮外,所有按钮都正确显示。如何修复此问题?如果要使用边界,请使用
f.setLayout(null)这很有效,但我的绘画方法不再有效了!
f.setLayout(null)
是否导致我的绘制方法被破坏?