Java 如何防止我的JPanel重新调整
我正在制作一个模拟RGB工作方式的java程序,3个滑块和3个相应的画布,颜色值在0到255之间。还有一个额外的画布,显示三种颜色的组合。我的问题是,当我开始增加滑块上的值时,我的整个面板开始拉伸。我已经看了代码一段时间了,运气不好。为了防止面板调整或使空间变大而不需要调整,我需要更改什么Java 如何防止我的JPanel重新调整,java,swing,Java,Swing,我正在制作一个模拟RGB工作方式的java程序,3个滑块和3个相应的画布,颜色值在0到255之间。还有一个额外的画布,显示三种颜色的组合。我的问题是,当我开始增加滑块上的值时,我的整个面板开始拉伸。我已经看了代码一段时间了,运气不好。为了防止面板调整或使空间变大而不需要调整,我需要更改什么 package javaapplication1; /** * * @author Latez Bradley */ import java.awt.BorderLayout; import jav
package javaapplication1;
/**
*
* @author Latez Bradley
*/
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class RGBSlider extends JFrame {
public RGBSlider() {
getContentPane().add(new TColor());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(1400, 1000);
setVisible(true);
}
public static void main(String arg[]) {
new RGBSlider();
}
}
class TColor extends JPanel {
int n;
DrawingCanvas canvas = new DrawingCanvas();
DrawingCanvas rc = new DrawingCanvas();
DrawingCanvas gc = new DrawingCanvas();
DrawingCanvas bc = new DrawingCanvas();
JLabel rgbValue = new JLabel("");
JLabel red = new JLabel("<html>Red<br>Hex Value: "+n+"<br>Bin: "+n+"<html><br>Dec:"+n+"</html>");
JLabel green = new JLabel("<html>Green<br>Hex Value: "+n+"<br>Bin: "+n+"<html><br>Decimal: </html>"+n);
JLabel blue = new JLabel("<html>Blue<br>Hex Value: "+n+"<br>Bin: "+n+"<html><br>Decimal: </html>"+n);
JSlider sliderR, sliderG, sliderB;
public TColor() {
sliderR = getSlider(0, 255, 5, 255, 5);
sliderR.setOrientation(1);
sliderG = getSlider(0, 255, 0, 255, 5);
sliderG.setOrientation(1);
sliderB = getSlider(0, 255, 0, 255, 5);
sliderB.setOrientation(1);
JPanel panel = new JPanel();
GridLayout myLayout = new GridLayout(4,3,200,0);
panel.setLayout((myLayout));
//panel.add(new JLabel("R-G-B Sliders (0 - 255)"));
panel.add(sliderR);
panel.add(red);
rc.setSize(50, 50);
panel.add(rc);
panel.add(sliderG);
panel.add(green);
gc.setSize(50,50);
panel.add(gc);
panel.add(sliderB);
panel.add(blue);
bc.setSize(50,50);
panel.add(bc);
panel.add(new JLabel("RGB Value: ", JLabel.RIGHT));
//rgbValue.setBackground(Color.white);
//rgbValue.setForeground(Color.black);
rgbValue.setOpaque(true);
panel.add(rgbValue);
canvas.setSize(300,300);
add(canvas);
add(panel);
}
public JSlider getSlider(int min, int max, int init, int mjrTkSp, int mnrTkSp) {
JSlider slider = new JSlider(JSlider.HORIZONTAL, min, max, init);
slider.setPaintTicks(true);
slider.setMajorTickSpacing(mjrTkSp);
slider.setMinorTickSpacing(mnrTkSp);
slider.setPaintLabels(true);
slider.addChangeListener(new SliderListener());
return slider;
}
class DrawingCanvas extends Canvas {
Color color;
Color rColor;
Color gColor;
Color bColor;
int redValue, greenValue, blueValue;
public DrawingCanvas() {
setSize(350, 350);
color = new Color(0, 0, 0);
setBackgroundColor();
}
public void setBackgroundColor() {
color = new Color(redValue, greenValue, blueValue);
setBackground(color);
//red.setBackground(Color.white);
//green.setBackground(gColor);
//blue.setBackground(bColor);
}
}
class SliderListener implements ChangeListener {
public void stateChanged(ChangeEvent e) {
JSlider slider = (JSlider) e.getSource();
if (slider == sliderR) {
canvas.redValue = slider.getValue();
rc.redValue=slider.getValue();
displayRGBColor();
//red.setBackground(ColorR);
} else if (slider == sliderG) {
canvas.greenValue = slider.getValue();
gc.greenValue = slider.getValue();
displayRGBColor();
} else if (slider == sliderB) {
canvas.blueValue = slider.getValue();
bc.blueValue=slider.getValue();
displayRGBColor();
}
rc.repaint();
red.setIgnoreRepaint(true);
gc.repaint();
bc.repaint();
canvas.repaint();
}
public String toBin(int x){
String temp="";
while(x!=0){
temp = (x%2)+temp;
x/=2;
}
return temp;
}
public void displayRGBColor() {
canvas.setBackgroundColor();
rc.setBackgroundColor();
gc.setBackgroundColor();
bc.setBackgroundColor();
//rgbValue.setText(Integer.toString(canvas.color.getRGB() & 0xffffff, 16));
rgbValue.setText("<html> Hex Value: "+Integer.toString(canvas.color.getRGB() & 0xfffffff, 16)+"<br>Bin: "+toBin(sliderR.getValue())+""+toBin(sliderG.getValue())+""+toBin(sliderB.getValue()));
red.setText("<html>Red<br>Hex Value: "+Integer.toString(canvas.color.getRed() & 0xffffff, 16)+"<br>Bin: "+" "+"<html><br>Dec:"+sliderR.getValue()+"</html>");
blue.setText("<html>Blue<br>Hex Value: "+Integer.toString(canvas.color.getBlue() & 0xffffff, 16)+"<br>Bin: "+toBin(sliderB.getValue())+"<html><br>Dec:"+sliderB.getValue()+"</html>");
green.setText("<html>Green<br>Hex Value: "+Integer.toString(canvas.color.getGreen() & 0xffffff, 16)+"<br>Bin: "+toBin(sliderG.getValue())+"<html><br>Dec:"+sliderG.getValue()+"</html>");
}
}
}
PackageJavaApplication1;
/**
*
*@作者Latez Bradley
*/
导入java.awt.BorderLayout;
导入java.awt.Canvas;
导入java.awt.Color;
导入java.awt.GridLayout;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JSlider;
导入javax.swing.border.TitledBorder;
导入javax.swing.event.ChangeEvent;
导入javax.swing.event.ChangeListener;
公共类RGBSlider扩展JFrame{
公共RGBSlider(){
getContentPane().add(新的TColor());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
设置大小(1400、1000);
setVisible(真);
}
公共静态void main(字符串arg[]){
新的RGBSlider();
}
}
类TColor扩展了JPanel{
int n;
DrawingCanvas canvas=新建DrawingCanvas();
DrawingCanvas rc=新的DrawingCanvas();
DrawingCanvas gc=新建DrawingCanvas();
DrawingCanvas bc=新的DrawingCanvas();
JLabel rgbValue=新的JLabel(“”);
JLabel red=新JLabel(“红色
十六进制值:+n+”
Bin:+n+”
Dec:+n+”);
JLabel绿色=新的JLabel(“绿色
十六进制值:+n+”
二进制:+n+”
十进制:+n);
JLabel blue=新的JLabel(“蓝色
十六进制值:“+n+”
二进制:“+n+”
十进制:“+n”);
JSlider SLIDER、sliderG、sliderB;
公共颜色(){
sliderR=getSlider(0,255,5,255,5);
滑块设置方向(1);
sliderG=getSlider(0,255,0,255,5);
sliderG.setOrientation(1);
sliderB=getSlider(0,255,0,255,5);
滑块b.设置方向(1);
JPanel面板=新的JPanel();
GridLayout myLayout=新的GridLayout(4,3200,0);
面板设置布局((myLayout));
//面板。添加(新JLabel(“R-G-B滑块(0-255)”);
面板。添加(滑块);
面板。添加(红色);
钢筋混凝土设置尺寸(50,50);
面板。添加(rc);
面板。添加(幻灯片);
面板。添加(绿色);
gc.setSize(50,50);
增补(gc);
面板.添加(滑块B);
面板。添加(蓝色);
bc.设置尺寸(50,50);
增补(bc);
添加(新JLabel(“RGB值:”,JLabel.RIGHT));
//RGB值。背景(颜色。白色);
//RGB值。设置前景(颜色。黑色);
rgbValue.set不透明(true);
面板。添加(RGB值);
canvas.setSize(300300);
添加(画布);
添加(面板);
}
公共JSlider getSlider(int-min、int-max、int-init、int-mjrTkSp、int-mnrTkSp){
JSlider slider=新的JSlider(JSlider.HORIZONTAL,min,max,init);
slider.setPaintTicks(真);
滑块。设置主轨迹间距(mjrTkSp);
滑块.setMinorTickSpacing(mnrTkSp);
slider.setPaintLabels(true);
addChangeListener(新的SliderListener());
返回滑块;
}
类DrawingCanvas扩展了Canvas{
颜色;
颜色;
色彩;
颜色b颜色;
int redValue、greenValue、blueValue;
公共绘图画布(){
设置大小(350350);
颜色=新颜色(0,0,0);
setBackgroundColor();
}
公共空间挫折背景色(){
颜色=新颜色(红色值、绿色值、蓝色值);
挫折背景(颜色);
//红色。背景(颜色。白色);
//绿色。背景色(gColor);
//蓝色。背景色(B色);
}
}
类SliderListener实现ChangeListener{
公共无效状态已更改(更改事件e){
JSlider slider=(JSlider)e.getSource();
如果(滑块==滑块错误){
canvas.redValue=slider.getValue();
rc.redValue=slider.getValue();
displayRGBColor();
//红色。背景(彩色);
}else if(slider==sliderG){
canvas.greenValue=slider.getValue();
gc.greenValue=slider.getValue();
displayRGBColor();
}else if(滑块==滑块B){
canvas.blueValue=slider.getValue();
blueValue=slider.getValue();
displayRGBColor();
}
rc.repaint();
红色。setIgnoreRepaint(真);
gc.repaint();
bc.repaint();
canvas.repaint();
}
公共字符串toBin(int x){
字符串temp=“”;
而(x!=0){
温度=(x%2)+温度;
x/=2;
}
返回温度;
}
public void displayRGBColor(){
canvas.setBackgroundColor();
rc.setBackgroundColor();
gc.setBackgroundColor();
bc.setBackgroundColor();
//rgbValue.setText(Integer.toString(canvas.color.getRGB()&0xffffff,16));
rgbValue.setText(“十六进制值:”+Integer.toString(canvas.color.getRGB()&0xfffffff,16)+“
Bin:”+toBin(sliderR.getValue())+“”+toBin(slider.getValue())+“”+toBin(sliderB.getValue());
red.setText(“red
十六进制值:“+Integer.toString(canvas.color.getRed()&0xffffff,16)+”
Bin:“+”+”
Dec:“+sliderR.getValue()+”);
blue.setText(“blue
十六进制值:”+Integer.toString(canvas.color.getBlue()&0xffffff,16)+“
Bin:“+toBin(sliderB.getValue())+”
Dec:“+sliderB.getValue()+”;
green.setText(“green
十六进制值:”+Integer.toString(canvas.color.getGreen()&0xffffff,16)+“
Bin:”+toBin(sliderG.getValue())+“
Dec:”+sliderG.getValue()+”;
}
}
}
pack()
不要混合使用AWT(画布)和Swing组件。使用所有的Swing组件。我在玩21点游戏时遇到了这个问题,每次出现卡片图片时,我都会尝试显示卡片